忽略对已提交的.gitignore的更改

时间:2014-05-08 15:24:12

标签: git

另一位开发人员提交了他的本地版本的.gitignore文件。我想在本地修改该文件而不会被唠叨:没有出现在" git status",no"被checkout覆盖"错误。

经常推荐的解决方案似乎是 " git update-index --assume-unchanged .gitignore"

这不起作用。

它确实会阻止文件显示在" git status"中,但在更改分支时会触发错误:

错误:checkout会覆盖对以下文件的本地更改:     的.gitignore

更多非解决方案:

  • "将.gitignore添加到.gitignore" =>什么也没做。
  • "将.gitignore添加到.git / info / exclude" =>什么也没做。
  • " git rm --cached .gitignore" => .gitignore出现在git状态。

其他无用的线程:

  • http://stackoverflow.com/questions/767147/how-do-i-tell-git-to-ignore-gitignore
  • http://stackoverflow.com/questions/10750351/git-hub-gitignore-error

所以,我的问题,这实际上可以做到吗? 谢谢你的时间。

修改

来自Shahbaz',Chris'和jthill的有用评论,我的结论是我的问题的答案是" No"。看起来git中没有内置机制来完全忽略本地跟踪的文件。幸运的是,有几种解决方案在情境上很有用。

感谢您的回答,伙计。

2 个答案:

答案 0 :(得分:0)

tl; dr this answer关于如何设置内容过滤器,该过滤器不会改变工作树或存储库中的现有内容:

git config filter.pinned-content.clean  'git show HEAD:%f 2>&- || cat'
git config filter.pinned-content.smudge 'cat %f 2>&- || cat'
mkdir -p .git/info
echo .gitignore filter=pinned-content >>.git/info/attributes

过滤器记录在.gitattributes manpage中,其理念是' clean'命令被送入回购的内容和“污迹”。命令被送入来自回购的内容;上面的过滤器对代替了你已经提交的任何内容,无论你想要添加什么内容,以及你现在获得的任何结账都会尝试替换它。

如果签出的文件没有被更改(与提交的版本相同),并且您切换到已删除该文件的分支(或从未拥有它),git也会从工作树中删除它。您可以通过

获取内容
git show @{1}:path/to/file > path/to/file    # or git show oldbranch:etcetera

如果文件与提交的版本不同,git将拒绝结帐。

答案 1 :(得分:-1)

您可以创建全局git ignore

https://help.github.com/articles/ignoring-files#create-a-global-gitignore

另一种选择是修改本地gitignore并将其从本地跟踪中删除:

git update-index --assume-unchanged .gitignore

如果文件从上游更改,则不确定是否有效。