maa*_*nus 5 shell cygwin git alias
我正在使用这个简单的 git 别名
rmdel = "!git rm $(git ls-files -d)"
Run Code Online (Sandbox Code Playgroud)
意思是“删除已删除”,即从暂存区删除从文件系统中删除的所有文件。它工作正常,除非有任何包含空格的文件。显然,列表也会被拆分,从而导致不存在文件的文件名。
我认为应该可以使用 IFS 来解决它,但是 IFS 似乎在 cygwin 中不起作用,我怀疑类似
rmdel = "!IFS=' ' git rm $(git ls-files -d)"`
Run Code Online (Sandbox Code Playgroud)
可以工作。有什么更好的主意吗?
ls-files
有一个为此目的设计的开关,-z
:
-z \0 line termination on output.
Run Code Online (Sandbox Code Playgroud)
xargs
有一个开关可以让你用空字符而不是空格分隔输入项,-0
. 结合它们,你得到:
$ git ls-files -dz | xargs -0 git rm
Run Code Online (Sandbox Code Playgroud)