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

时间:2018-09-25 08:14:26

标签: git github gitlab

首先,我看到了使用git subtree split

的解决方案

但是,上述解决方案一次只能移动1个分支(通常是主分支)。现在我想从该子目录中移动所有分支(大约100个分支),有没有办法使用git命令来做到这一点?

1 个答案:

答案 0 :(得分:1)

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

    git filter-branch -f --subdirectory-filter "src/" --prune-empty -- --all

用子目录的名称替换src/。选项--all将在所有分支上执行操作。

希望这会有所帮助。

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

  • 首先,您使用--mirror选项克隆远程存储库,这将导致带有所有分支的本地存储库,
  • 然后将这个本地存储库设为常规存储库。

然后在这个包含所有分支的新克隆存储库中,可以应用filter-branch命令。

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

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

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

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