首先,我看到了使用git subtree split
但是,上述解决方案一次只能移动1个分支(通常是主分支)。现在我想从该子目录中移动所有分支(大约100个分支),有没有办法使用git命令来做到这一点?
答案 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的根。
希望我能帮助您理解此命令。