ChatGPT解决这个技术问题 Extra ChatGPT

全局 Git 忽略

我想将 Git 设置为全局忽略某些文件。

我已将 .gitignore 文件添加到我的主目录 (/Users/me/) 中,并在其中添加了以下行:

*.tmproj

但它并没有忽略这种类型的文件,知道我做错了什么吗?

您可能还想查看 GitHub 的忽略建议——help.github.com/articles/ignoring-files;他们有 repository 种常见的忽略模式
您可能还想考虑在单个项目中仅使用 .gitignore。否则,如果您(或其他人)在新系统上克隆项目,您还必须每次都重新创建全局排除文件和配置。
项目创建的可忽略文件应位于项目 .gitignore 文件中,计算机上创建的可忽略文件应位于全局 .gitignore 中(如编辑器/IDE 临时文件等)。
Python 虚拟环境目录是我的全局或本地排除文件中条目的常见用例。
@Pylinux 实际上,根据 git-scm,个人 IDE 和工作流特定的东西可以放在 repo 中未跟踪的文件 .git/info/exclude 中,因此不一定要放在全局文件中。此外,默认和自动全局 gitignore 文件是 $HOME/.config/git/ignore

S
Smart Manoj

您需要设置全局 core.excludesfile 配置文件以指向此全局忽略文件,例如:

*nix 或 Windows git bash:

git config --global core.excludesFile '~/.gitignore'

窗口命令:

git config --global core.excludesFile "%USERPROFILE%\.gitignore"

Windows PowerShell:

git config --global core.excludesFile "$Env:USERPROFILE\.gitignore"

对于 Windows,它设置为位置 C:\Users\%username%\.gitignore。您可以通过执行以下操作来验证配置值是否正确:

git config --global core.excludesFile

结果应该是您的用户配置文件 .gitignore 的扩展路径。确保该值不包含未扩展的 %USERPROFILE% 字符串。

重要提示:以上命令只会设置 git 将使用的忽略文件的位置。该文件仍必须在该位置手动创建并填充忽略列表。 (来自 muruge 的评论)

您可以在 https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files#configuring-ignored-files-for-all-repositories-on-your-computer 阅读有关该命令的信息


只要它不在您的 HEAD 或您的索引中,无论该文件是否曾被跟踪,都应该没有任何区别。如果您将 git statusgit config core.excludesfile 的输出添加到您的问题中,这可能会有所帮助。
我可以在 ~/.gitignore 内的行首使用 # 在全局忽略文件中添加注释吗?
官方 Git Windows 工具包的最新版本使用 *nix 语法。如果这条线不起作用,请尝试使用 *nix 代替。
我无法使用 %USERPROFILE% 变量使其工作。我必须使用 *nix 目录分隔符输入文件的完整路径。例如 core.excludesfile C:/Users/User/.gitignore
无法让它与 %USERPROFILE% 变量一起使用。我必须在 Windows 中使用 git config --global core.excludesfile '~/.gitignore' 将其设置为位置 C:/users/{myusername}/.gitignore。此外,上面的命令只会设置 git 将使用的忽略文件的位置。该文件仍必须在该位置手动创建并填充忽略列表。
L
Lawrence

在重新配置全局排除文件之前,您可能需要使用以下命令检查它当前的配置:

git config --get core.excludesfile

就我而言,当我运行它时,我看到我的全局排除文件配置为

~/.gitignore_global


有一个默认位置 git 会查找此文件,但很遗憾,git config --get core.excludesFile 不会返回它。如果没有返回任何内容,则当前“配置”的内容类似于 ~/.config/git/ignore。请参阅下面的答案:stackoverflow.com/a/22885996/9849440
S
Steve Jorgensen

尽管其他答案是正确的,但它们正在设置全局配置值,而全局 git 忽略文件有一个默认的 git 位置:

*尼克斯:

~/.config/git/ignore

视窗:

%USERPROFILE%\git\ignore

您可能需要创建 git 目录和 ignore 文件,然后您可以将全局忽略放入该文件中,仅此而已!

Source

放置模式的文件取决于模式的使用方式。

用户希望 Git 在所有情况下都忽略的模式(例如,由用户选择的编辑器生成的备份或临时文件)通常进入用户 ~/.gitconfig 中由 core.excludesFile 指定的文件。它的默认值为 $XDG_CONFIG_HOME/git/ignore。如果 $XDG_CONFIG_HOME 未设置或为空,则使用 $HOME/.config/git/ignore 代替。


这很棒;我不知道这个......但这不是生成的文件吗?更新/重新安装时可以覆盖吗?
我相信该文件是通过运行某些 git 命令创建/修改的。由于它是每个用户目录中的设置文件,我认为它不应该被覆盖。
我同意这应该是公认的答案,但是我在 -t̶h̶e̶̶d̶o̶c̶u̶m̶e̶n̶t̶a̶t̶i̶o̶n̶ 帮助文章 (help.github.com/articles/ignoring-files) 中没有找到它
看起来在 Windows 上路径也是 ~/.config/git/ignore
这肯定是最好的答案,有没有办法覆盖接受的答案?如果他们遵循其他答案,很多人最终会使他们的生活变得比他们需要的更复杂......
a
alex

从头开始创建全局 gitignore:

$ cd ~
$ touch .gitignore_global
$ git config --global core.excludesfile ~/.gitignore_global

第一行将目录更改为 C:/Users/User 之后,您创建一个扩展名为 .gitignore_global 的空文件,最后将全局忽略设置为该文件。然后你应该用某种记事本打开它并添加所需的忽略规则。


P
Prerak Mann

在你的主目录中创建一个 .gitignore 文件

touch ~/.gitignore

向其中添加文件/文件夹

例子

# Files
*.gz
*.tmproj
*.7z

# Folders
.vscode/
build/

# If folders don't work, you can still do this
.vscode/*
build/*

检查一个 git 是否已经有一个全局 gitignore

git config --get core.excludesfile

告诉 git 文件在哪里

git config --global core.excludesfile '~/.gitignore'

瞧!!


似乎文件名无关紧要 &我找到了肯特。 C Dodds 将此文件命名为 .gitignore_global,这不是消除与真实 .gitignore 冲突的可能性的更好选择吗?
在我看来,将你的东西附加到真正的 .gitignore 可能会更好,即使它确实存在。
L
LaGrandMere

here

如果您在 repo 中创建一个名为 .gitignore 的文件,git 在查看要提交的文件时将使用其规则。请注意,在将规则添加到此文件以忽略它之前,git 不会忽略已经跟踪的文件。在这种情况下,必须取消跟踪文件,通常使用:

git rm --cached filename

是你的情况吗?


我试图在全球范围内忽略,这没有发生!
@MildFuzz 在 Linux 上 core.excludesfile 文件的解释似乎与 .gitignore 文件不同。如果您想忽略整个目录,只需输入目录名称,如 .vscode/ 而不是 .vscode/*
P
Purkhalo Alex

如果你使用 Unix 系统,你可以通过两个命令来解决你的问题。第一个初始化配置,第二个用要忽略的文件更改文件。

$ git config --global core.excludesfile ~/.gitignore
$ echo '.idea' >> ~/.gitignore

a
alex

记住运行命令

git config --global core.excludesfile '~/.gitignore'

只会设置全局文件,但不会创建它。对于 Windows,请检查您的用户目录中的 .gitconfig 文件,然后根据您的偏好对其进行编辑。在我的情况下是这样的:

[core]
  excludesfile = c:/Users/myuser/Dropbox/Apps/Git/.gitignore

S
Sri Sankaran

我可以通过在我的 /users/me/.gitignore-global 文件中包含 .tmproj*.tmproj 来忽略 .tmproj 文件。

请注意,文件名是 .gitignore-global 而不是 .gitignore。在 /users/me 目录中名为 .gitignore 的文件中包含 .tmproj*.tmproj 不起作用。


只要它与您的 core.excludesfile 配置匹配,您调用什么全局忽略文件并不重要。
啊!好点@CharlesBailey。然而,这可能是作者可能想要检查的东西。 .tmproj 文件未被忽略的原因可能是因为用户的 excludesfile 不是 .gitignore
我猜他认为用户会足够聪明地意识到这一点。
这应该有更多的赞成票,我的 git 没有在全球范围内重新调整 .gitignore 时遇到了同样的问题,只是因为它的名字也是 .gitignore ......所以我决定将其更改为 .gitignore_global 并将“core.excludesfile”更改为指向那个新文件,它就像一个魅力!
N
Nic

您应该为此创建一个排除文件。查看 this gist,这很不言自明。

但是,要解决您的问题,您可能需要使用 git rm --cached path/to/.tmprojgit addcommit 您的 .gitignore 文件取消索引 .tmproj 文件(如果您已将其添加到索引中)。


我试图在全球范围内做到这一点,而不仅仅是每个回购
是的,这就是我在要点中链接的内容。我对原来的问题有点困惑。你做了git rm --cached吗?
是的,试过了。在我看来,我已经遵循了所有推荐的建议!我错过了什么?
如建议的那样,我会添加您的 git status 并在问题中排除信息:)
b
bboydflo

在 linux 的 windows 子系统上,我必须通过 cd ~/ 然后 touch .gitignore 导航到子系统根目录,然后在那里更新全局 gitignore 配置。

我希望它可以帮助某人。


J
Jose Paez

如果 .gitignore 方法不适合您,另一种可能的解决方案是:

git update-index --skip-worktree path_to_file

这将忽略对该文件的本地和上游更改,直到您决定再次允许它们:

git update-index --no-skip-worktree path_to_file

您可以获得标记为已跳过的文件列表:

git ls-files -v . | grep ^S

请注意,与 --skip-worktree 不同,一旦拉动上游更改,--assume-unchanged 状态就会丢失。


m
marcdomain

如果您使用的是 VSCODE,则可以获取此扩展程序来为您处理任务。它会在您每次保存工作时监视您的工作区,并帮助您自动忽略您在 vscode settings.json 中指定的文件和文件夹ignoreit (vscode extension)