忽略git中修改(但未提交)的文件?
Posted
技术标签:
【中文标题】忽略git中修改(但未提交)的文件?【英文标题】:Ignore modified (but not committed) files in git? 【发布时间】:2010-10-13 21:42:27 【问题描述】:我可以告诉 git 忽略已修改(删除)但不应提交的文件吗?
情况是我在 repo 中有一个子目录,其中包含我根本不感兴趣的东西,所以我删除了它以防止它出现在自动完成等(在 IDE 中)。
但是现在,如果我将该文件夹添加到 .gitignore,则根本没有任何变化,所有内容都显示为 git status 已删除。
有没有办法让 git 忽略它?
(或者,当我使用 git-svn 时,我可以将更改提交到本地 git 并确保它们不会传递到 svn repo 吗?)
【问题讨论】:
而不是仅仅在回购索引中将它们标记为未修改,您可能希望将它们从索引中完全删除。因此,虽然您的工作目录中仍然有该文件,但可以完全删除 repo 索引,而 git 甚至根本不会认为它已经存在。请参阅下面我的答案中的链接。 【参考方案1】:查看git-update-index man page 和 --assume-unchanged 位及相关信息。
当我遇到你的问题时,我会这样做
git update-index --assume-unchanged dir-im-removing/
或特定文件
git update-index --assume-unchanged config/database.yml
【讨论】:
你能以某种方式列出所有被忽略的文件吗? 您可以通过git update-index --no-assume-unchanged config/database.yml
取回文件
请参阅下面 Dave L 的答案以获得更新的解决方案,而不会出现 --assume-unchanged
的一些缺点。
是否可以将其添加到存储库配置文件中,而不是每次都手动运行此命令?
下次提交是否会显示为已修改?我不希望它被假定永远不变。【参考方案2】:
一个更新更好的选择是
git update-index --skip-worktree
在硬重置或拉取的新更改时不会丢失。
请参阅man page。
还有http://fallengamer.livejournal.com/93321.html的比较
【讨论】:
需要注意的一个缺点是,一旦文件的修改被skip-worktree
隐藏,查找这些文件有点麻烦。我知道的唯一方法是git ls-files -v |grep -v '^H'
。此外,许多 GUI 工具不了解此功能,并且可能会产生有趣的错误,例如checkout
因“隐藏”修改文件而失败。
我一直无法理解任何 git doc 文件。所以这没什么帮助。 (每个 doc 文件都假定您了解其他每个 doc 文件的细微之处!)【参考方案3】:
使用此代码
git update-index --assume-unchanged file-name
【讨论】:
真的很有趣。我必须在我的 maven 项目中使用密码,但我不想在 git 存储库上发布它,所以我在本地、属性中放置了没有值的占位符,我提交它,然后我插入密码,但标记使用建议的命令更改文件。所以密码没有公布。【参考方案4】:我通常做的是
git stash
git whatever-else
git stash apply
git stash clear
【讨论】:
fwiw 你也可以使用 'git stash pop' 来同时执行最后两个操作(尽管如果你愿意的话,'git stash clear' 会清除所有的存储条目)。【参考方案5】:不能忽略跟踪的文件,因此您必须先将它们从索引中删除。添加一个.gitignore
忽略您不想要的目录,然后删除它们,并使用git rm --cached
删除任何落后者。
【讨论】:
嗯,我试试这个,但后来我将所有文件列为已删除。我应该提交它并且 --cached 会导致它不会被推送到遥控器吗?或者我得到了什么。错误的?对我来说最重要的是不破坏远程 (svn) 存储库。 你不能提交任何没有从你的索引开始的东西。 git rm --cached 所有你不想提交的东西,然后在本地添加一个 .gitignore 文件,其中包含“*”。现在,无论你 git add 多少,你都不会再在索引中看到这些文件了。 啊,我想我现在明白 --cached 了。它只会从索引中删除东西,而不会影响工作树。我不确定我是否遗漏了什么,但是AFAIS 我正在寻找相反的情况,将其从工作树中删除而不触及索引。或者我可以以某种方式使用它吗?【参考方案6】:什么在我的案例中起作用:
git restore --staged filename
示例:git restore --staged index.js
【讨论】:
以上是关于忽略git中修改(但未提交)的文件?的主要内容,如果未能解决你的问题,请参考以下文章