18

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

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

4

3 回答 3

14

它是否添加到存储库中,而不是 in.git/info/exclude和 on .gitignore

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

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

于 2011-12-22T03:04:46.777 回答
5

您正在运行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可能会很痛苦。

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

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

于 2013-05-01T18:21:20.037 回答
0

对于那些有这个问题试图排除整个目录的人:

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

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

于 2021-01-25T10:16:37.937 回答