git的更新索引--assume-不变的目录(git update-index --assume-u

2019-06-18 00:33发布

1.7.12的git

我想,以纪念一个给定的目录作为假设 - 不变下的所有文件。

1) git update-index --assume-unchaged dir/给出“忽略路径”。

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命令的作品。 什么是不与管工作?

不,这是不够的我补充dir到的.gitignore。 我需要这些文件是在资源库,但不期望的改变将在当地做需要被忽略,以便用户可以做拉。

Answer 1:

git update-index希望它的命令行中的文件名,而不是它的标准输入。

步骤1:

cd到要承担的文件夹是不变的,

第2步:

您可以执行此:

git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')

要么

git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged

虽然,与这两种情况下,有空格的文件名会是有问题的。 如果你有这些,你可以这样做:

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

编辑:从@MatthewScharley关于纳入输入git ls-files -z

Windows命令

注:如果您使用的是Windows,使用git的Bash运行这些命令



Answer 2:

find来自GNU查找工具组命令有一个-exec选项,去除大部分使用的麻烦xargs ,尽管它的语法有点特殊。 但它确实很好用空格的文件名处理。

该命令将得到GIT中承担与上市目录下是不变的所有文件:

find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;

查找后需要每个参数-exec直到; (你必须逃离,以免你的shell吃它),并运行它一次找到的每个文件,而代替{}与找到的文件名(再次,单引号这样你的shell不会吃它)。

使用find的匹配标准(最大递归深度,这场比赛是否是一个文件或者是目录,文件名是否表达式匹配)和-exec你可以做所有种类的强大的东西。

不知道有关的其他实现find命令。 因人而异。



Answer 3:

添加目录名.git/info/exclude 。 这适用于未跟踪文件。



Answer 4:

叶氏,

git update-index --assume-unchanged

只有不与目录中的文件工作。 我认为,更快的方式之一:

cd dir
ls | xargs -l git update-index --assume-unchanged


文章来源: git update-index --assume-unchanged on directory