递归的 git update-index --assume-unchanged

45

我正在尝试运行以下代码:

git update-index --assume-unchanged myFolderToIgnore

其中myFolderToIgnore是一个文件夹。但程序失败了,显示无法标记它。

所以我尝试了:

git update-index --assume-unchanged myFolderToIgnore/

哪个GIT出现了“忽略路径myFolderToIgnore/”的提示,但实际上什么都没做(它依然会检测到我的修改并尝试提交)。

最后我不得不手动将每个文件标记为未更改状态。我错过了什么?


你是不是想使用 --assume-unchanged 命令? - Chronial
哎呀,那是个打错字了 :) 我正在运行的代码实际上使用了 --assume-unchanged - gxc
2个回答

79

update-index 是一个内部的排水命令,因此不像真正的前端命令那样方便。你将需要自己处理递归部分:

git ls-files -z myFolderToIgnore/ | xargs -0 git update-index --assume-unchanged

PSA: 很可能 assume-unchanged 不是你要找的,你应该使用 skip-worktree。更多信息请参见这里


2
在GNU系统上,使用ls-files -zxargs -0更加健壮,以防文件名中有空格的情况。 - CB Bailey
非常感谢,我在网上搜索了几个小时,终于找到了解决方法。愿上帝保佑您的神圣不朽之魂。 - Iamsodarncool

1
我遇到了一个问题,我的文件夹里有成千上万个文件和文件夹。这导致了“参数列表过长”的错误。
下面的解决方案将为每个文件夹运行命令并遍历这些文件夹中的内容。只要你的成千上万个文件被分在文件夹中,这个方法就会有效。
find . -maxdepth 1 -type d \( ! -name . \) -exec bash -c "cd '{}' && pwd && git ls-files -z ${pwd} | xargs -0 git update-index --assume-unchanged" \;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接