git update-index --assume-unchanged返回错误

时间:2011-12-22 02:49:38

标签: git ignore

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

我需要做些什么来解决这个问题?什么是抱怨和为什么?

3 个答案:

答案 0 :(得分:13)

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

如果答案是肯定的,那么该文件不在存储库中,这就是错误的原因。

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

答案 1 :(得分:3)

您正在运行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从存储库中删除它们。

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

答案 2 :(得分:0)

对于那些试图排除整个目录的人来说:

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

我终于发现我必须以不同的方式对待目录中的文件,因为其中一些已经被跟踪,而另一些则没有。所以我只是对已经跟踪的文件(在 git update-index --skip-worktree <file> 中显示为修改的)。与在整个目录上调用此命令相比,这是有效的,因为我没有尝试排除尚未跟踪且已被 .gitignore 排除的文件。这个目录中的其他文件我不必用这个命令排除,因为它们已经被 .gitignore 排除了。