【问题标题】:git update-index --assume-unchanged returns errorgit update-index --assume-unchanged 返回错误
【发布时间】:2011-12-22 02:49:37
【问题描述】:

git update-index --assume-unchanged <filename> 返回fatal: Unable to mark file <filename>

我需要做什么来解决这个问题?它在抱怨什么以及为什么?

【问题讨论】:

  • 你发现了吗?让我知道,这样我就可以用你到底发生了什么来更新答案。

标签: git ignore


【解决方案1】:

它是否已添加到存储库中,而不是在 .git/info/exclude 中,而不是在 .gitignore 中?

如果对其中任何一个的回答是肯定的,那么文件不在存储库中,这就是错误的原因。

尝试git ls-files -o 并查看文件是否存在。不应该。

【讨论】:

  • 如果您的文件被暂存,您仍然会收到同样的错误,因此您可能需要先执行git reset HEAD <file>
【解决方案2】:

您正在运行git update-index --assume-unchanged,因为您有文件已签入存储库,但您想忽略本地编辑。

正如 Pedro 所指出的,导致错误的文件并未检入存储库。 (它显示在 git ls-files -o 中,这意味着它未被跟踪。)

这可能是因为您试图像这样递归地忽略整个目录:

find ./folder/ -type f | xargs git update-index --assume-unchanged

但不仅该文件夹中的文件被修改,新文件也被创建。 (例如,通过构建脚本。)

如果您确定要忽略所有修改过的文件,可以使用以下命令:

git ls-files -m | xargs git update-index --assume-unchanged

但要小心。 请注意,弄乱--assume-unchanged 可能会很痛苦。

考虑重新工作,以便这些文件根本不需要在存储库中。然后您可以将它们添加到您的 .gitignore 并使用 git rm --cached 从存储库中删除它们。

如果您可以将文件保留在存储库和用户工作目录之外,那可能是理想的选择。例如,如果文件是作为构建的一部分创建的,您可以创建一个静态库,而不是让每个开发人员在本地运行构建过程。

【讨论】:

    【解决方案3】:

    对于那些试图排除整个目录时遇到此问题的人:

    我刚遇到这个问题,很困惑。我在 .gitignore 中添加了目录,其中一个文件显示在 git ls-files -o 中。该目录的其他文件出现在git status

    我终于发现我必须以不同的方式处理目录中的文件,因为其中一些已经被跟踪,而另一些则没有。所以我只是在已经跟踪的文件上使用了git update-index --skip-worktree <file>(在我的情况下是git update-index --assume-unchanged <filename>的更好版本,请参阅here)(在git status中显示的文件正在被修改)。与在整个目录上调用此命令相比,这很有效,因为我没有尝试排除尚未跟踪且已被 .gitignore 排除的文件。此目录中的其他文件我不必使用此命令排除,因为它们已被 .gitignore 排除。

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 2013-04-27
      • 2011-08-31
      • 2012-08-30
      • 1970-01-01
      • 2013-06-16
      • 2012-10-06
      • 1970-01-01
      相关资源
      最近更新 更多