将子目录分离为新的存储库,但将其保留为子文件夹

时间:2014-12-09 15:38:02

标签: git

我一直在寻找一个git过滤器分支和子树来分离一个子文件夹,我想从一个repo到另一个repo。但是我想在新的repo中保留子文件夹,而不是子文件夹的内容是root。

那样:

repo/
|-- sub1/
|-- sub2/
|-- sub3/

变为:

repo2/
|-- sub2/

有人可以帮忙吗?

2 个答案:

答案 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