Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略对提交的.gitignore的更改_Git - Fatal编程技术网

忽略对提交的.gitignore的更改

忽略对提交的.gitignore的更改,git,Git,另一个开发人员提交了其本地版本的.gitignore文件。我想在本地修改该文件,而不会被唠叨:不会在“git状态”上显示,不会出现“被签出覆盖”错误 通常推荐的解决方案似乎是 “git更新索引--假定未更改。gitignore” 这是行不通的 它确实会阻止文件以“git状态”显示,但在更改分支时会触发错误: 错误:签出将覆盖您对以下文件的本地更改: .gitignore 更多非解决方案: “Add.gitignore to.gitignore”=>不执行任何操作。 “Add.gitignore

另一个开发人员提交了其本地版本的.gitignore文件。我想在本地修改该文件,而不会被唠叨:不会在“git状态”上显示,不会出现“被签出覆盖”错误

通常推荐的解决方案似乎是 “git更新索引--假定未更改。gitignore”

这是行不通的

它确实会阻止文件以“git状态”显示,但在更改分支时会触发错误:

错误:签出将覆盖您对以下文件的本地更改: .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>不这样做,考虑更改它以消除非全局忽略,并鼓励用户使用 Git /Fiels/EXECUTE <代码>以避免他们的个人忽略。如果您感兴趣的话,我有一个简短但相当残忍的黑客,可以很好地处理这样的简单情况。它劫持了git的稀疏签出特性,安装了一个签出后钩子并添加了一个命令,它几乎只是linux(需要良好的硬链接和最新的GNU)。谢谢你的提议,但现在我对现有的解决方法感到满意。另外,我更愿意使用源代码管理来保证安全:-)