【问题标题】:Difference between `git rm --cached` and `git update-index --assume-unchanged`?`git rm --cached` 和 `git update-index --assume-unchanged` 之间的区别?
【发布时间】:2016-01-30 10:46:28
【问题描述】:

我不明白git rm --cachedgit update-index --assume-unchanged 之间的区别。

我知道git rm --cached <file> 将从暂存区删除一个文件。

而且,我知道git update-index --assume-unchanged <file> 也这样做。

我还看到这两个命令都作为对 SO 上类似问题的建议提供。

这两个命令中的任何一个是否有其他影响使它们不同?

【问题讨论】:

  • 请查看下面给出的答案,谢谢。
  • 抱歉,休息了一天。

标签: git caching git-rm


【解决方案1】:

命令

git rm --cached <file>

用于取消跟踪 Git 分支中的文件。此命令将从暂存区中删除 file 将在您下次提交时从存储库中删除该文件。

命令

git update-index --assume-unchanged <file>

也会使file 从暂存区消失。但是,此命令不同,因为它告诉 Git 仅暂时忽略对 file 所做的任何更改。因此,当您提交文件时,假设它已经存在,它将仍然是存储库的一部分。当您希望 Git 再次查看对 file 所做的更改时,可以运行以下命令:

git update-index --no-assume-unchanged <file>

如果您之前运行 assume-unchanged 时该文件已经存在,这会将文件返回到暂存区域。

这里是link 对应git rm --cached,这里是link 对应git update-index --assume-unchanged

【讨论】:

  • 不幸的措辞:git update-index --assume-unchanged 不会从索引中删除该文件的条目,而是会停止 Git 对照文件系统上的匹配文件检查该条目。我相信你可能只是在这里有些措辞草率,但这是一个重要的;-)为了让我的观点更清楚,最初的索引(即在git read-tree之后)“包含”树中的所有文件- ish 刚刚被读入。因此,让 Git 对索引条目“视而不见”实际上并不等于 删除它。
  • 嗯。我明白你的观点,这是一个重要的观点。谢谢。问题:那么,如果我忘记执行git update-index --no-assume-unchanged &lt;file&gt; 命令,这是否意味着它将继续忽略我的文件,直到我记得这样做?如果是这样,那让我对使用这个命令有点紧张。
  • 另外,在git rm --help 页面中,我没有看到任何关于从存储库中删除文件的内容。 @TimBiegeleisen,你有支持这一点的消息来源吗?
  • 更新了我的答案。 git update-index --assume-unchanged 就像索引上的临时掩码。它会一直有效,直到您将其关闭。
猜你喜欢
  • 2011-08-31
  • 2018-03-03
  • 2013-04-27
  • 2012-08-30
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多