git update-index --assume-unchanged <filename>
命令返回:fatal:无法标记文件<filename>
。
我需要做什么才能解决这个问题? 它在抱怨什么,为什么会这样?
它是否已添加到存储库,而不在.git/info/exclude
和.gitignore
中?
如果答案是肯定的,则该文件不在存储库中,这就是错误的原因。
尝试运行git ls-files -o
并查看文件是否存在。 它不应该存在。
git reset HEAD <file>
。 - DavidJ.git/info/exclude
文件以忽略该文件。不知道为什么它不能使用update-index
。之前它一直很好用。 - Mejangit update-index --assume-unchanged
,因为你有文件已经提交到代码仓库中,但你想忽略本地更改。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
从存储库中删除它们。如果能够使这些文件既不在存储库中也不在用户的工作目录中,那就更理想了。例如,如果这些文件是作为构建过程的一部分创建的,您可以创建一个静态库,而不是让每个开发人员在本地运行构建过程。对于那些试图排除整个目录的人:
我刚遇到了这个问题,感到相当困惑。我已经在.gitignore中添加了该目录,并且其中一个文件出现在git ls-files -o
中。该目录的其他文件显示在git status
中。
最后,我弄清楚了必须以不同的方式处理目录中的文件,因为其中一些文件已经被跟踪,而另一些文件则没有。因此,我只是对已经被跟踪的文件(在git status
中显示为已修改的文件)使用了git update-index --skip-worktree <file>
(在我的情况下更好的版本是git update-index --assume-unchanged <filename>
,请参见here)。与在整个目录上调用此命令相比,这样做有效,因为我没有尝试排除尚未被跟踪但已被.gitignore排除的文件。我不必使用此命令来排除该目录中的其他文件,因为它们已经被.gitignore排除了。
首先,对您的文件进行分阶段处理。然后,在此之后运行--assume-unchanged
命令。最后,取消分阶段处理。