Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 将子目录拆分为新的repo,但将其保留为子文件夹_Git - Fatal编程技术网

Git 将子目录拆分为新的repo,但将其保留为子文件夹

Git 将子目录拆分为新的repo,但将其保留为子文件夹,git,Git,我一直在寻找一个git过滤器分支和子树来分离一个子文件夹,我想从一个repo到另一个repo。但是,我希望在新回购协议中保留子文件夹,而不是子文件夹的内容是根目录 以便: repo/ |-- sub1/ |-- sub2/ |-- sub3/ 变成: repo2/ |-- sub2/ 有人能帮忙吗?您可以尝试以下方法: git filter-branch --subdirectory-filter ./sub2 git push repo2 HEAD 如果要保留sub2并删除所有其他内容,

我一直在寻找一个git过滤器分支和子树来分离一个子文件夹,我想从一个repo到另一个repo。但是,我希望在新回购协议中保留子文件夹,而不是子文件夹的内容是根目录

以便:

repo/
|-- sub1/
|-- sub2/
|-- sub3/
变成:

repo2/
|-- sub2/

有人能帮忙吗?

您可以尝试以下方法:

git filter-branch --subdirectory-filter ./sub2
git push repo2 HEAD

如果要保留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

有没有理由不简单地克隆repo,然后删除其他子目录?你试过我回答中的建议了吗?