在我们引入.gitignore文件之前,大量文件被签入我们的git中。我现在正试图用:
git rm --cached `git ls-files -i --exclude-from=.gitignore`问题是,许多文件路径中都有空格。
例如:
......
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg12.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg13.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg14.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg15.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg16.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg17.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg18.png.meta
.......在一个完整的文件中有一个很大的空间,我需要处理掉。
我在寻找一种优雅的方式:
Assets/Aoi\ Character Pack/Viewer/Resources/Aoi/Viewer\ BackGrounds/bg18.png.meta-或者-
git ls-files从我的文件列表中抽取出来,所有文件都整齐地依偎在引号之间。
'Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg18.png.meta'-编辑-
到目前为止,我已经尝试过git ls-files -i --exclude-from=.gitignore | sed 's/\ /\\\ /g'
虽然这令人高兴地输出了文件路径,就像我所期望的那样,随着空格的转义……当我试图执行
git rm --cached `git ls-files -i --exclude-from=.gitignore | sed 's/\ /\\\ /g'`我得到-错误:未知开关‘\’
我以为烟斗出了点问题。
发布于 2016-02-11 01:28:30
规范的方式:
git ls-files -z | xargs -0 git rm另一种方式是:
git ls-files | xargs -d '\n' git rm发布于 2016-02-11 02:04:46
雷切尔·邓肯的回答让我朝着正确的方向前进,我找到了一个可行的解决方案!我还从https://superuser.com/questions/401614/inserting-string-from-xargs-into-another-string那里借来了一些技巧
git ls-files -i --exclude-from=.gitignore | tr '\n' '\0' | xargs -0 -L1 -I '$' git rm --cached '$'上面的脚本编译了现在属于.gitignore排除规则的所有版本git文件的列表,在每个std行(文件路径)周围包装引号,然后用修改后的字符串执行git rm --cached命令。
我喜欢这种方式,因为终端会对它从源代码管理中删除的每个文件进行确认。
干杯!
https://stackoverflow.com/questions/35326218
复制相似问题