这是我尝试过的,但结果很奇怪/出乎意料:
git filter-branch -f --tree-filter \
'for f in $(ls); do if [ "$f" != "deploy" ]; \
then rm -rf "./$f"; fi done; mv "./deploy/philips/*" .; \
rm -rf "./deploy"' --prune-empty HEAD
为可读性而格式化。实际上,这是一条线。
发生的事情是mv
失败,因为还有一些文件,前一个循环没有删除。该操作“成功”完成了所有提交的处理,但效果是随后保留在根目录中的内容没有被过滤/只有一小部分。
所以,我有两个问题:
难道没有更简单的方法可以从特定分支中清除除单个目录之外的所有目录吗?
如果
filter-branch
是要走的路,我可以堆叠多个过滤器吗?似乎它以随机顺序执行过滤器。真的吗?
PS。如果我可以在牺牲提交历史的同时简化它 - 这是一个可以接受的解决方案。
还尝试过这样的事情:
$ git banch
master
preliminary
* release-0.6.3
$ git checkout release-0.6.3 master/deploy/philips
还尝试了master:/deploy/philips
, master:deploy/philips
,/deploy/philips
和deploy/philips
-master -- deploy/philips
我仍然没有接近目标。:(
编辑:
请不要介意这个问题。我是个白痴!部署目录被忽略/在 master 中不存在!这就是为什么我无法检查出来。