Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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存储库中_Git_Github_Gitlab - Fatal编程技术网

将子目录分离到包含所有分支的独立git存储库中

将子目录分离到包含所有分支的独立git存储库中,git,github,gitlab,Git,Github,Gitlab,首先,我看到了一个使用 但是,上面的解决方案一次只移动一个分支(通常是主分支)。现在,我想从该子目录中移动所有分支(大约100个分支),有没有办法使用git命令执行此操作?如果我正确理解您想要实现的目标,我认为您应该尝试filter branch命令的--subdirectory filter: git filter-branch -f --subdirectory-filter "src/" --prune-empty -- --all 用子目录的名称替换src/。选项--all将对

首先,我看到了一个使用


但是,上面的解决方案一次只移动一个分支(通常是主分支)。现在,我想从该子目录中移动所有分支(大约100个分支),有没有办法使用git命令执行此操作?

如果我正确理解您想要实现的目标,我认为您应该尝试
filter branch
命令的
--subdirectory filter

    git filter-branch -f --subdirectory-filter "src/" --prune-empty -- --all
用子目录的名称替换
src/
。选项
--all
将对所有分支执行操作

希望这有帮助

编辑: 该命令将仅更改本地分支的根目录。如果要更改所有远程分支的根目录,我建议您使用:

  • 首先,使用
    --mirror
    选项克隆远程存储库,这将导致一个包含所有分支的裸本地存储库
  • 然后将此本地存储库设置为常规存储库
然后,在这个包含所有分支的新克隆存储库中,您可以应用
filter branch
命令

使用选项
--subdirectory filter
,此命令将指定的子目录设置为本地git repo的根目录

--prune empty
选项将放弃所有空提交(因为它们只引用子目录外的文件)

理解所有git历史记录都将被重写,就好像子目录始终是git repo的根一样,这一点很重要


我希望我能帮助您理解这个命令。

您可以“以另一种方式”继续,我的意思是
克隆整个repo,然后删除所有子树,但要保留的子树除外。另外,你有没有看过Paul在你链接的问题中的回答?Pauls的回答就像我说的,一次只移动一个分支。我想移动属于该子目录的所有分支。克隆方法也不好,因为克隆时只能克隆一个分支。我在远程存储库中有100个分支。您好,先生,我不太理解上面评论的行为。您能补充一下执行任务所需的步骤吗?请注意,我是在克隆存储库步骤中完成的。所以在我的本地存储库中,我只有master分支。@TungDo我已经编辑了答案,我希望这能回答您的问题。