全局 Git 忽略
Posted
技术标签:
【中文标题】全局 Git 忽略【英文标题】:Global Git ignore 【发布时间】:2011-11-12 05:17:30 【问题描述】:我想将 Git 设置为全局忽略某些文件。
我在我的主目录 (/Users/me/
) 中添加了一个 .gitignore
文件,并在其中添加了以下行:
*.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
。
【参考方案1】:
如果.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
状态会在拉取上游更改后丢失。
【讨论】:
【参考方案2】:问题的修正(抱歉,我还不能在任何地方发表评论)来自:
Steve Jorgensen 于 2014 年 4 月 5 日 19:52 回答
仅适用于 Windows!
如果你自己设置了一个环境变量 HOME(Windows 本身似乎没有设置它,而是 Windows 上的“HOME”变量是 USERPROFILE),默认全局 git 忽略文件的路径是:
$HOME\.config\git\ignore
就像在 Unix 系统上一样。没有它应该是 %USERPROFILE%\git\ignore,请参阅 Steve Jorgensen 的回答(我无法测试它,因为我已经设置了 HOME 并且确实需要它)。
【讨论】:
将 cmets 发布为答案会使您面临被否决的风险,这使您远离足够的代表发表评论 是的,但我认为这个修改很重要。我花了将近 2 个小时才意识到这一点。【参考方案3】:您需要设置全局core.excludesfile
配置文件以指向此全局忽略文件,例如:
*nix 或 Windows git bash:
git config --global core.excludesFile '~/.gitignore'
Windows cmd:
git config --global core.excludesFile "%USERPROFILE%\.gitignore"
Windows PowerShell:
git config --global core.excludesFile "$Env:USERPROFILE\.gitignore"
对于 Windows,它设置为位置 C:\Users\myusername\.gitignore
。您可以通过以下方式验证配置值是否正确:
git config --global core.excludesFile
结果应该是您的用户个人资料.gitignore
的扩展路径。确保该值不包含未扩展的%USERPROFILE%
字符串。
重要:以上命令只会设置git将使用的忽略文件的位置。该文件仍必须在该位置手动创建并填充忽略列表。 (来自muruge的评论)
您可以在https://help.github.com/articles/ignoring-files/#create-a-global-gitignore阅读有关该命令的信息
【讨论】:
只要它不在您的HEAD
或您的索引中,无论该文件是否曾被跟踪,都应该没有任何区别。如果您将git status
、git config core.excludesfile
的输出添加到您的问题中,这可能会有所帮助。
我可以在~/.gitignore
中的行首使用#
在全局忽略文件中添加cmets吗?
官方 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 将使用的忽略文件的位置。该文件仍必须在该位置手动创建并填充忽略列表。【参考方案4】:
-
在您的主目录中创建一个 .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'
瞧!!
【讨论】:
文件名似乎无关紧要,我找到了 Kent. C Dodds 将此文件命名为.gitignore_global
,这不是更好的选择吗?
【参考方案5】:
如果您使用的是 VSCODE,则可以获取此扩展程序来为您处理任务。 它会在您每次保存工作时监视您的工作区,并帮助您自动忽略您在 vscode settings.json 中指定的文件和文件夹 ignoreit (vscode extension)
【讨论】:
【参考方案6】:如果你使用 Unix 系统,你可以用两个命令解决你的问题。 第一个初始化配置和第二个更改文件的地方有一个要忽略的文件。
$ git config --global core.excludesfile ~/.gitignore
$ echo '.idea' >> ~/.gitignore
【讨论】:
【参考方案7】:在适用于 linux 的 windows 子系统上,我必须通过 cd ~/
然后 touch .gitignore
导航到子系统根目录,然后在其中更新全局 gitignore 配置。
我希望它对某人有所帮助。
【讨论】:
【参考方案8】:虽然其他答案是正确的,但它们正在设置全局配置值,而全局 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
。
这肯定是最好的答案,有没有办法覆盖接受的答案?如果他们遵循其他答案,很多人最终会使他们的生活变得比他们需要的更复杂......【参考方案9】:
记住运行命令
git config --global core.excludesfile '~/.gitignore'
只会设置全局文件,但不会创建它。
对于 Windows,请检查您的用户目录中的 .gitconfig
文件,然后根据您的偏好对其进行编辑。在我的情况下是这样的:
[core]
excludesfile = c:/Users/myuser/Dropbox/Apps/Git/.gitignore
【讨论】:
【参考方案10】:从头开始创建全局 gitignore:
$ cd ~
$ touch .gitignore_global
$ git config --global core.excludesfile ~/.gitignore_global
-
第一行将目录更改为
C:/Users/User
然后创建一个带有.gitignore_global
扩展名的空文件
最后将该文件设置为全局忽略。
然后您应该使用某种记事本打开它并添加所需的忽略规则。
【讨论】:
【参考方案11】:在重新配置全局排除文件之前,您可能需要使用以下命令检查它当前的配置:
git config --get core.excludesfile
就我而言,当我运行它时,我看到我的全局排除文件被配置为
~/.gitignore_global那里已经列出了一些东西。因此,在给定问题的情况下,首先检查现有的排除文件并将新的文件掩码添加到其中可能是有意义的。
【讨论】:
【参考方案12】:我可以通过在我的/users/me/.gitignore-global
文件中包含.tmproj
或*.tmproj
来忽略.tmproj
文件。
请注意,文件名是 .gitignore-global
而不是 .gitignore
。将.tmproj
或*.tmproj
包含在/users/me
目录中名为.gitignore
的文件中不起作用。
【讨论】:
全局忽略文件的名称无关紧要,只要它与您的core.excludesfile
配置匹配即可。
啊!好点@CharlesBailey。然而,这可能是作者可能想要检查的东西。 .tmproj
文件未被忽略的原因可能是因为用户的excludesfile
不是.gitignore
。
我猜他认为用户会很聪明地意识到这一点。
这应该有更多的赞成票,我的 git 也有同样的问题,没有在全球范围内重新调整 .gitignore,只是因为它的名字也是 .gitignore ......所以我决定把它改成 .gitignore_global 和更改“core.excludesfile”以指向该新文件,它就像一个魅力!【参考方案13】:
您应该为此创建一个排除文件。查看this gist,这很容易解释。
不过,要解决您的问题,您可能需要使用 git rm --cached path/to/.tmproj
或 git add
和 commit
您的 @987654326 对 .tmproj
文件(如果您已将其添加到索引)取消索引@文件。
【讨论】:
我试图在全球范围内做到这一点,而不仅仅是每个回购 是的,这就是我在要点中所链接的内容。我对原来的问题有点困惑。你做了git rm --cached
吗?
是的,试过了。在我看来,我已经遵循了所有推荐的建议!我错过了什么?
按照建议,我会将您的 git 状态添加到问题中并排除信息 :)【参考方案14】:
来自here。
如果您在 repo 中创建一个名为 .gitignore 的文件,git 将在查看要提交的文件时使用其规则。 请注意,在将规则添加到此文件之前,git 不会忽略已跟踪的文件以忽略它。 在这种情况下,必须取消跟踪文件,通常使用:
git rm --cached filename
是你的情况吗?
【讨论】:
我试图忽略全局,这不会发生! @MildFuzz 在 Linux 上,core.excludesfile
文件的解释似乎与 .gitignore
文件不同。如果您想忽略整个目录,只需输入目录名称,如 .vscode/
而不是 .vscode/*
以上是关于全局 Git 忽略的主要内容,如果未能解决你的问题,请参考以下文章