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
想要它的命令行上的文件名,而不是它的标准输入.
cd
进入你想假设的文件夹不变,
你可以这样做:
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,请使用Git Bash运行这些命令
小智 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
命令的其他实现.因人而异.