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