版本控制-移动子目录到分支



我有一个git repo,在它的根目录下有几个子目录,例如

repo<master>/a/files
repo<master>/b/files
...

我想把每个子目录从主分支移到它自己的分支中,并在这个过程中把文件移到一个目录中,这样我就剩下了这样的东西。

repo<branch_a>/files
repo<branch_b>/files
...

关于如何做到这一点,我有一些想法,例如:

  1. 从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子模块的好地方

最新更新