我有一个git repo,在它的根目录下有几个子目录,例如
repo<master>/a/files
repo<master>/b/files
...
我想把每个子目录从主分支移到它自己的分支中,并在这个过程中把文件移到一个目录中,这样我就剩下了这样的东西。
repo<branch_a>/files
repo<branch_b>/files
...
关于如何做到这一点,我有一些想法,例如:
- 从master中删除所有项目,创建一个新的分支,复制该分支所需的文件,提交。这样做的问题是,我将丢失文件的提交历史记录。分支,删除我不需要的目录,将文件向上移动一级,提交。这将保持历史,但我将在每个分支中有许多相同的删除。
我是否可以更有效地做到这一点,即减少删除,但仍然保持修订历史?
这个问题类似于分离(移动)子目录到单独的Git存储库,但不是将每个子目录移动到单独的存储库,而是将其移动到自己的分支。
这里有一个比较简洁的方法:
- 删除
master
上的所有子目录,每个子目录在一个单独的提交 - 创建你想要的分支,基于
master
- 在每个分支上,恢复删除该分支所需目录的提交。
- 将目录向上移动一级
Pseudobash:
$ for dir in one two three; do git rm -r $dir; git commit -m "Remove $dir"; done
$ git log # For commit SHAs
$ git checkout -b one
$ git revert $sha_that_removed_one
$ git mv one/* .
$ git commit -m "Move one files to the top level"
这似乎是使用git子模块的好地方