git update-index - 在目录上保持不变

Xan*_*unn 95 git command-line pipe

git 1.7.12

我想将给定目录下的所有文件标记为假设未更改.

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命令有效.什么不使用管道?

不,我添加dir到.gitignore 是不够的.我需要将这些文件放在存储库中,但是需要在本地进行不需要的更改,以便用户可以进行拉取.

twa*_*erg 166

git update-index 想要它的命令行上的文件名,而不是它的标准输入.

步骤1:

cd 进入你想假​​设的文件夹不变,

第2步:

你可以这样做:

git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')
Run Code Online (Sandbox Code Playgroud)

要么

git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged
Run Code Online (Sandbox Code Playgroud)

虽然,无论哪种情况,带空格的文件名都会有问题.如果你有这些,你可以使用这个:

git ls-files -z | xargs -0 git update-index --assume-unchanged
Run Code Online (Sandbox Code Playgroud)

编辑:纳入来自@MatthewScharley的输入git ls-files -z.

Windows命令

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

  • @twalberg:你可以使用`git ls-files -z` (7认同)
  • @MohamedHussain`git ls-files -z | xargs -0 git update-index --no-assume-unchanged`,我想...... (3认同)
  • 仅供参考,那个`| tr'\n'''位是不必要的. (2认同)
  • @twalberg如何撤消此命令"git ls-files -z | xargs -0 git update-index --assume-unchanged" (2认同)
  • `git ls-files -z | git update-index -z --stdin` 更干净。 (2认同)

小智 22

find来自GNU Findutils 的命令有一个-exec选项可以消除大部分使用麻烦xargs,虽然它的语法有点特殊.但它确实与带有空格的文件名完美匹配.

这个命令将让git假设所列目录中和下面的所有文件都保持不变:

find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;
Run Code Online (Sandbox Code Playgroud)

查找接受每个参数,-exec直到;(你必须逃脱,以免你的shell吃掉它)并为找到的每个文件运行一次,同时用{}找到的文件名替换(再次,单引号,这样你的shell不会吃它).

使用find匹配条件(最大递归深度,匹配是文件还是目录,文件名是否与表达式匹配),-exec你可以做各种有力的事情.

不确定该find命令的其他实现.因人而异.

  • [`-exec`是标准选项](http://pubs.opengroup.org/onlinepubs/009695399/utilities/find.html).您还可以`-exec git update-index --assume-unchanged {} +`(也由标准定义),它会立即将多个文件名传递给命令,从而减少调用git命令的次数. (2认同)

Ste*_*ers 13

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