我一直在寻找一个git过滤器分支和子树来分离一个子文件夹,我想从一个repo到另一个repo。但是我想在新的repo中保留子文件夹,而不是子文件夹的内容是root。
那样:
repo/
|-- sub1/
|-- sub2/
|-- sub3/
变为:
repo2/
|-- sub2/
有人可以帮忙吗?
答案 0 :(得分:0)
您可以尝试以下方法:
git filter-branch --subdirectory-filter ./sub2
git push repo2 HEAD
答案 1 :(得分:0)
如果您想保留sub2
并删除其他所有内容,请执行以下操作:
git filter-branch --tree-filter 'for i in * .*; do test "$i" = . -o "$i" = .. -o "$i" = sub2 && continue; rm -fr "$i"; done' --prune-empty
即
--tree-filter
内的命令将迭代目录内容并删除除.
,..
和sub2
以外的所有内容,以及通过执行此操作而变为空的所有提交。
同一事物的另一个变体有点简单,但不会处理嵌入换行符的路径:
git filter-branch --tree-filter 'git ls-files | grep -v ^sub2/ | xargs rm -fr' -f --prune-empty