git update-index –assume-目录上的更改
git 1.7.12
我想将给定目录下的所有文件标记为不变。
1) git update-index --assume-unchaged dir/
给“忽略path”。
2) git update-index --assume-unchaged dir/*
很快就会失败,因为它会遇到没有被跟踪的文件,因此它会给出“致命的:无法标记文件”并退出。
3)尝试生成要标记的文件列表。 cd
到所需的目录,然后运行git ls-files | tr '\n' ' ' | git update-index --assume-unchanged
git ls-files | tr '\n' ' ' | git update-index --assume-unchanged
git ls-files | tr '\n' ' ' | git update-index --assume-unchanged
。 这不会产生错误消息,但它不会成功标记文件。 命令的第一部分, git ls-files | tr '\n' ' '
git ls-files | tr '\n' ' '
,正确地产生一个我想标记的所有文件的空格分隔列表。 如果我将该命令的输出复制并粘贴到命令行上,那么git update-index
命令将起作用。 什么是不与pipe道工作?
不,对我来说,添加dir
到.gitignore是不够的。 我需要这些文件在存储库中,但不需要的更改将在本地进行,需要忽略,以便用户可以进行拉取。
git update-index
需要命令行上的文件名,而不是标准input。
步骤1:
cd
进入你想要承担的文件夹是不变的,
第2步:
你可以这样做:
git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')
要么
git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged
尽pipe在任何情况下,带空格的文件名都是有问题的。 如果你有这些,你可以使用这个:
git ls-files -z | xargs -0 git update-index --assume-unchanged
编辑:从@MatthewScharley合并input有关git ls-files -z
。
Windows命令
注意:如果你在windows上,使用Git Bash来运行这些命令
GNU Findutils的find
命令有一个-exec
选项,它可以消除使用xargs
大部分麻烦,尽pipe它的语法有点特别。 然而,它确实处理与空格的文件名。
这个命令会让git假定列表中和列表下的所有文件都不变:
find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;
查找后,每个参数-exec
直到;
(你必须逃脱,以免你的shell吃掉它),并为find的每个文件运行一次,同时用find的文件名replace{}
(再次,单引号,这样你的shell就不会吃了)。
使用find
的匹配标准(最大recursion深度,匹配是文件还是目录,文件名是否匹配expression式)和-exec
你可以做各种强大的事情。
不确定find
命令的其他实现。 因人而异。
将目录名称添加到.git/info/exclude
。 这适用于未跟踪的文件。
叶氏,
git update-index --assume-unchanged
仅与文件一起使用,不与目录一起使用。 我认为,更快的方法之一:
cd dir ls | xargs -l git update-index --assume-unchanged