Git - 删除已删除的文件

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)

可以工作。有什么更好的主意吗?

Mic*_*zek 5

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)