在我们介绍.gitignore文件之前,已将整个BUNCH文件检入我们的git repo。我正在尝试用以下方法清理它:
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
.......
我需要摆脱整个lotta文件中的整个LOTTA空间。
我正在寻找一种优雅的方式:
答:使用“\”转义空格,例如
Assets/Aoi\ Character Pack/Viewer/Resources/Aoi/Viewer\ BackGrounds/bg18.png.meta
-OR -
B:让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'`
我得到 - 错误:未知开关`\'
我预计管道会发生一些不稳定的事情。
答案 0 :(得分:6)
规范方式:
git ls-files -z | xargs -0 git rm
另一种方式:
git ls-files | xargs -d '\n' git rm
答案 1 :(得分:3)
git ls-files -i --exclude-from=.gitignore | tr '\n' '\0' | xargs -0 -L1 -I '$' git rm --cached '$'
上面的脚本编译了所有版本化的git文件的列表,这些文件现在属于.gitignore排除规则,在每个标准行(文件路径)周围包装引号,然后执行git rm --cached
命令修改过的字符
我喜欢这种方式,因为终端会对从源代码管理中删除的每个文件发出确认。
干杯!