gpt4 book ai didi

git - 忽略对提交的 .gitignore 的更改

转载 作者:太空狗 更新时间:2023-10-29 14:25:11 24 4
gpt4 key购买 nike

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

通常推荐的解决方案似乎是“git update-index --assume-unchanged .gitignore”

这不起作用。

它确实会阻止文件出现在“git status”中,但它会在更改分支时触发错误:

错误:您对以下文件的本地更改将被 check out 覆盖: .gitignore

更多非解决方案:

  • “将 .gitignore 添加到 .gitignore”=> 什么都不做。
  • “将 .gitignore 添加到 .git/info/exclude”=> 什么都不做。
  • "git rm --cached .gitignore"=> .gitignore 显示在 git status 上。

其他无用的线程:

  • 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 中没有内置机制可以完全忽略本地跟踪的文件。幸运的是,有几种在特定情况下有用的解决方法。

谢谢大家的回答。

最佳答案

tl;博士 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 中,这个想法是“干净”命令是将内容馈送到 repo 协议(protocol)中,而“涂抹”命令是从 repo 协议(protocol)中馈送的内容;上面的过滤器对替换任何已经提交的内容来替换您要添加的内容,以及您现在拥有的任何 checkout 内容都会尝试替换它。

如果 checkout 的文件没有被更改(与提交的版本相同),并且你切换到一个已经删除该文件(或从未有过)的分支,git 也会从工作树中删除它。您可以通过以下方式取回内容

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

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

关于git - 忽略对提交的 .gitignore 的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23546027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com