Git全局忽略不起作用
Posted
技术标签:
【中文标题】Git全局忽略不起作用【英文标题】:Git global ignore not working 【发布时间】:2011-11-23 15:54:24 【问题描述】:我已经创建了文件.gitignore_global
并将它放在我的 git 安装目录中。当我运行命令时:
git config --global core.excludesfile ~/.gitignore
忽略文件中的规则不会应用于我的提交。
当我重命名文件 .gitignore
并将其放入我的项目根目录时,规则确实适用。
这里有什么问题?
【问题讨论】:
@Jarrod ` ~/.gitignore_global` 是 OP 的意思,只是帖子中的一个错字,尽管他接受了我的回答,所以你的编辑不好 这能回答你的问题吗? Global Git ignore 我遇到了问题,因为它对我也不起作用。我的问题是用小 F 写core.excludesfile
而不是 core.excludesFile
。希望这对遇到类似情况的新人有所帮助
在这里观看视频youtu.be/3LYBdd3RGKs
【参考方案1】:
也许你需要这样做:
git config --global core.excludesfile ~/.gitignore_global
喝杯咖啡。
【讨论】:
对不起,这就是我的意思。我复制的那个只是想看看有什么效果。 适合咖啡和牙齿。您确定 .gitignore_global 在您的 $HOME 中吗?你说你安装在 git install 目录下? 知道为什么它在这里仍然不起作用吗?我有一个想要跳过的 .7z 文件;我添加了这些规则:gist.github.com/octocat/9257657;在我更改文件后,它仍然会在 .git 上进行版本控制:( 是的,gitignore
文件仅适用于未跟踪的文件,不适用于之前添加的文件
我刚刚注意到的另一件事是 .gitignore_global 文件中的行模式必须与项目主目录中的路径完全匹配。例如,如果项目名称是 myProject,它在 myProject/sql/init 中生成 SQL 代码,并且您想忽略 myProject/sql/init/*.sql,则该条目必须是 */sql/init/。同样,对于在myProject/msg/dao/ 和myProject/dao 中生成的DAO/DTO 代码,必须有两个条目来捕获dao 子目录中的所有文件——必须添加*/*/dao/ 和*/dao/。跨度>
【参考方案2】:
我想我会参与其中。全局忽略文件似乎不起作用还有另一个原因。我认为之前的答案中没有涉及到这一点。这非常明显 - 当然 - 很容易错过。
是,git 只会忽略新文件。如果文件已经被 git 跟踪,那么 git 当然不会忽略它!因此,任何gitignore
或exclude
文件中的任何模式都不适用。
这是有道理的。为什么 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
【讨论】:
git update-index --assume-unchanged file
正是我想要的,谢谢!
你用git update-index --assume-unchanged file
救了我的命,谢谢!!!
我做了git check-ignore .
,它说无法访问''C:\Users\...\.gitignore''。那时我意识到我必须删除单个引号。我通过编辑 ~\.gitconfig 删除了它们【参考方案3】:
我发现当我这样定义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)
【讨论】:
我也观察到了这一点。我浏览了文档,但没有找到任何东西:除了 .gitignore(每个目录)和 .git/info/exclude 之外,git 还会查看此文件以查找不打算跟踪的文件模式。 "~/" 扩展为 $HOME 的值,"~user/" 扩展为指定用户的主目录。【参考方案4】:注意:开始git1.7.12 (August 2012):
的价值:
core.attributesfile
默认为 $HOME/.config/git/attributes 和 当这些文件存在时,core.excludesfile
分别默认为$HOME/.config/git/ignore
。
因此,如果您创建一个$HOME/.config/git/attributes
文件,您甚至不必设置您的core.excludesfile
设置。
【讨论】:
【参考方案5】:该文件必须在您的主目录中。在 Windows 上,它通常意味着: C:\文档和设置\[用户]。
在 linux 上是: /home/[用户]
【讨论】:
【参考方案6】:我遇到了这个问题,因为我最初调用 'git config core.excludefiles' 时没有 --global 并且值错误,因此它已将属性存储在本地。看起来本地属性隐藏了全局属性(具有正确的值),完全忽略了它。
【讨论】:
【参考方案7】:全局 git 忽略可能不起作用的另一个原因:路径中的不可见字符。
我只是在将来自git-check-ignore 的警告消息粘贴到 Chrome 的地址栏中时才发现这是我的问题,幸运的是它变得可见:
(在终端上看不到它。这可能是一个 long 调试的兔子洞......?)
【讨论】:
【参考方案8】:我遇到了同样的问题(在 Windows 上)。我最终检查了我的~/.gitconfig
文件,发现我的excludesfile
设置为:
excludesfile = C:\\Users\\myUserName\\Documents\\gitignore_global.txt
但它应该是:
excludesfile = C:\\Users\\myUserName\\.gitignore_global
更改后,一切正常。
【讨论】:
【参考方案9】:我对这个文件的编码也有一个有趣的事情。不知何故,我的 Windows 10(带有 Powershell)使用编码“UTF-16 LE”创建了文件,而 Git 无法处理这个问题。当我将编码更改为更合理的值时,它确实有效。
【讨论】:
【参考方案10】:添加人们可能错过的另一件事,或者至少是我出错的地方。
我犯了没有复制粘贴命令的错误,我拼写了excludefile
而不是excludesfile
并且在我重新评估拼写之前肯定丢失了半个小时左右,认为这是别的东西。
您不会因设置无效选项而收到警告或错误。如果语法无效,您确实会收到警告/错误消息,这就是为什么我错误地认为拼写错误会以同样的方式被捕获。
【讨论】:
【参考方案11】:.gitignore(_global) 似乎不起作用的另一个难以追踪的原因可能是行中的前导空格。该文件不能容忍前导空格。因此,请确保文件的每一行都没有任何内容,除非它是空行。我花了一段时间才弄清楚。
只需加上我的两分钱。
【讨论】:
【参考方案12】:我最近犯了一个错误,运行以下命令
git config core.excludesfile tags
这将 excludesfile 路径更改为当前存储库中的本地文件,并且此配置已写入 .git/config
下的本地配置文件,因此要修复我刚刚打开 .git/config
文件并删除行 excludesfile tags
和一切恢复正常。
【讨论】:
以上是关于Git全局忽略不起作用的主要内容,如果未能解决你的问题,请参考以下文章