忽略对提交的.gitignore的更改
另一个开发人员提交了其本地版本的.gitignore文件。我想在本地修改该文件,而不会被唠叨:不会在“git状态”上显示,不会出现“被签出覆盖”错误 通常推荐的解决方案似乎是 “git更新索引--假定未更改。gitignore” 这是行不通的 它确实会阻止文件以“git状态”显示,但在更改分支时会触发错误: 错误:签出将覆盖您对以下文件的本地更改: .gitignore 更多非解决方案:忽略对提交的.gitignore的更改,git,Git,另一个开发人员提交了其本地版本的.gitignore文件。我想在本地修改该文件,而不会被唠叨:不会在“git状态”上显示,不会出现“被签出覆盖”错误 通常推荐的解决方案似乎是 “git更新索引--假定未更改。gitignore” 这是行不通的 它确实会阻止文件以“git状态”显示,但在更改分支时会触发错误: 错误:签出将覆盖您对以下文件的本地更改: .gitignore 更多非解决方案: “Add.gitignore to.gitignore”=>不执行任何操作。 “Add.gitignore
- “Add.gitignore to.gitignore”=>不执行任何操作。
- “Add.gitignore to.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的有益评论中,我得出结论,我的问题的答案是“不”。看起来git中没有内置机制来完全忽略本地跟踪的文件。幸运的是,有几种变通方法在实际情况下很有用
谢谢你们的回答。你们可以创建一个全局git 另一个选项是修改本地gitignore并将其从本地跟踪中删除:
git update-index --assume-unchanged .gitignore
如果文件从上游更改,则不确定该操作是否有效。tl;dr on介绍如何设置不会改变工作树或存储库中现有内容的内容筛选器:
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
过滤器记录在中,“干净”命令是将内容输入到repo中,“污迹”命令是将内容输入到repo中;上面的过滤器对将任何已经提交的内容替换为您尝试添加的内容,以及您现在为任何签出所获得的内容,并尝试将其替换为
如果签出的文件尚未更改(与提交的版本相同),并且您切换到已删除该文件(或从未删除过该文件)的分支,git也会将其从工作树中删除。您可以通过以下方式取回内容:
git show @{1}:path/to/file > path/to/file # or git show oldbranch:etcetera
如果文件与提交的版本不同,git将拒绝签出 我没有投反对票,但这并不能回答我的问题。我想要本地更改,而不是全局更改(我使用多个存储库)。gitignore对跟踪的文件没有影响,它便于保存构建产品和其他松散状态报告。我特别指出,“git更新索引--假定未更改。gitignore”在我的问题中不起作用。我就是这么做的。即使在更换分支时,它也可以正常工作。如果它不适合你,我很抱歉,但这是github网站上建议的方法。祝你好运,很抱歉我帮不上忙。这可能是因为一个分支有提交的.gitignore文件,而另一个没有。可能人们没有注意到这个解决方案并不总是有效的,因为他们的所有分支都长期包含.gitignore文件。您的意思是echo.gitignore而不是.gitconfig。接近但没有饼干。当我切换分支时,.gitnore文件被删除了。修复了输入错误,谢谢。如果您从具有跟踪的
.gitignore
的分支切换到没有跟踪的.gitignore
的分支,git还能做什么?完全忽略它。把它放在那里,就像它是存储库之外的一个文件一样。好吧,我认为这是git的一个弱点。一旦一个文件被跟踪,它就相当固执地跟踪它,可以说,在这种情况下,跟踪到一个错误。我没有找到解决办法,但我接受你的第二个评论。因为我不能接受评论,所以我接受了包含评论的答案。抱歉,我今天似乎遇到了UI问题。部分解决方案是在.git/info/exclude中添加本地规则。显然,如果您想从.gitignore中删除规则,这是没有帮助的。如果您正在跟踪.gitignore
,您可以告诉git不要显示其更改,但这并不意味着没有更改。如果在修改.gitignore
时切换分支,您将丢失更改。这就是你想要的吗?如果这不是您想要的,请继续将您的更改与同事的更改合并,并提交。如果您不想与同事共享.gitignore,请按照您提到的那样执行git rm--cached.gitignore
,然后将其提交到实际中。通常,.gitignore
文件应该包含适用于所有使用代码库的人的忽略。如果提交的<代码> .GiGiGNORES/COD>不这样做,考虑更改它以消除非全局忽略,并鼓励用户使用