Git全局忽略不工作

时间:2011-09-23 12:55:18

标签: git

我已经创建了文件.gitignore_global并将其放在我的git安装目录中。当我运行命令时:

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

忽略文件中的规则不会应用于我的提交。

当我重命名文件.gitignore并将其放入我的项目根目录时,规则确实适用。

这里有什么问题?

12 个答案:

答案 0 :(得分:139)

也许你需要这样做:

git config --global core.excludesfile ~/.gitignore_global 

喝点咖啡。

答案 1 :(得分:63)

以为我会参与其中。全局忽略文件似乎无法正常工作的另一个原因。这是我认为在早期答案中没有涉及到的内容。很明显 - 当然 - 很容易错过。

是的,git 只会忽略新文件。如果文件已被git跟踪,那么当然git不会忽略它!因此,任何gitignoreexclude文件中的模式都不适用

这是有道理的。为什么git想忽略对已经跟踪的文件的修改?如果要忽略该文件,则必须先告诉git不要跟踪它,然后git忽略它,如手册中所述。有关如何解开文件的信息,请see this answer

这一切都让我问,是否可以忽略对跟踪文件的更改?再次,git提供。这个答案; Git: Ignore tracked files为我们提供了命令(将file替换为您要忽略的文件):

git update-index --assume-unchanged file

最后,这里有一些关于调试git ignore的其他信息。

gitignore(5) Manual Page告诉我们:

  

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

所以,这是新的,取代之前提到的~/.gitignore_global

接下来,这非常有用,从1.8.2开始,我们现在有了一些出色的调试工具。看看:

Git Learns to Ignore Better - New in 1.8.2

这显示了如何使用新的check-ignore标志来验证git是否成功忽略了您的模式,例如。

git check-ignore bin/a.dll --verbose

答案 2 :(得分:10)

我发现当我像这样定义global core.excludesfile时:

git config --global core.excludesfile $HOME/.config/git/ignore

它不起作用。将其更改为不使用$HOME变量,如下所示:

git config --global core.excludesfile ~/.config/git/ignore
它立即开始工作了。希望这有助于其他人。

供参考:

$ git --version
git version 1.7.10.2 (Apple Git-33)

答案 3 :(得分:6)

注意:开始git1.7.12 (August 2012)

  

值:

     
      
  • core.attributesfile默认为$ HOME / .config / git / attributes和
  •   当这些文件存在时,
  • core.excludesfile分别默认为$HOME/.config/git/ignore
  •   

因此,如果您创建了$HOME/.config/git/attributes文件,则甚至无需设置core.excludesfile设置。

答案 4 :(得分:3)

该文件必须位于您的主目录中。在Windows上,它通常意味着:     C:\ documents and settings \ [user]。

在linux上它是:     /家庭/ [用户]

答案 5 :(得分:2)

我遇到了这个问题,因为我最初打电话给git config core.excludefiles'没有--global并且值不正确,因此它在本地存储了属性。看起来本地属性隐藏了全局属性(具有正确的值),完全忽略它。

答案 6 :(得分:1)

我遇到了同样的问题(在Windows上)。我最终检查了我的~/.gitconfig文件,发现我的excludesfile设置为:

excludesfile = C:\\Users\\myUserName\\Documents\\gitignore_global.txt

但应该是:

excludesfile = C:\\Users\\myUserName\\.gitignore_global

在我改变之后,一切都按原样运作。

答案 7 :(得分:1)

全局git忽略的另一个原因可能不起作用:路径中的不可见字符。

我发现将git-check-ignore中的警告消息粘贴到Chrome的地址栏中时,这是我的问题,幸运地可见

enter image description here

(它在终端上不可见。这可能是一个兔子的调试漏洞...)

答案 8 :(得分:0)

另一个难以追踪的原因.gitignore(_global)似乎不起作用可能是行中的前导空格。该文件不允许前导空格。因此,请确保您的文件的每一行都没有,除非它是空行。我花了一段时间才弄明白。

加我的两分钱。

答案 9 :(得分:0)

我最近犯了一个错误并运行以下命令 git config core.excludesfile tags 这改变了当前存储库中本地文件的excludesfile路径,并且此配置已写入.git/config下的本地配置文件,因此为了解决这个问题,我刚刚打开了.git/config文件并删除了该行excludesfile tags,一切恢复正常。

答案 10 :(得分:0)

我对此文件的编码也很有趣。我的Windows 10(带有Powershell)以某种方式创建了编码为“ UTF-16 LE”的文件,而Git无法以某种方式处理此文件。当我将编码更改为更有意义的值时,它确实起作用了。

答案 11 :(得分:0)

添加 ppl 可能遗漏的另一件事,或者至少是我出错的地方。
我犯了没有复制粘贴命令的错误,我拼写了
excludefile
而不是
excludesfile
在我重新评估拼写之前,肯定输了半个小时左右,以为是别的东西。
您不会收到设置无效选项的警告或错误。如果语法无效,您确实会收到警告/错误消息,这就是为什么我错误地认为拼写错误会以同样的方式被发现。