2

例如,我有一个 git repo,其根目录中有几个子目录

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

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

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

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

  1. 从 master 中删除所有项目,创建一个新分支,复制该分支所需的文件,提交。这样做的问题是我会丢失文件的提交历史。
  2. 分支,删除我不需要的目录,将文件上移一级,提交。这将保留历史记录,但我将在每个分支中进行大量相同的删除。

无论如何我可以更有效地做到这一点,即减少删除但仍保持修订历史?

这个问题类似于将子目录分离(移动)到单独的 Git 存储库中,但是我不想将每个子目录移动到单独的存储库中,而是将其移动到自己的分支中。

4

2 回答 2

3

这是一个适度简洁的方法:

  • 删除 上的所有子目录master,每个子目录都在一个单独的提交中
  • 创建您想要的每个分支,基于master
  • 在每个分支上,还原删除分支所需目录的提交
  • 将目录上移一级

伪bash:

$ 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"
于 2015-05-15T18:59:38.963 回答
0

这似乎是使用git 子模块的好地方

于 2015-05-17T08:26:25.853 回答