git - 将子目录移动到分支

时间:2015-05-15 17:53:25

标签: git version-control reorganize

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

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

我想将每个子目录移出主分支并进入它自己的分支,然后在这个过程中将文件移到一个目录中,这样我就会留下这样的东西。

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

我对如何操作有一些想法,例如:

  1. 从主服务器中删除所有项目,创建新分支,复制该分支所需的文件,提交。这个问题是我将丢失文件的提交历史记录。
  2. 分支,删除我不需要的目录,将文件移动一级,提交。这将保留历史记录,但我在每个分支中都会有很多相同的删除。
  3. 无论如何,我可以更有效地做到这一点,即减少删除但仍保留修订历史记录?

    这个问题与Detach (move) subdirectory into separate Git repository类似,但我没有将每个子目录移动到一个单独的存储库中,而是将其移动到自己的分支中。

2 个答案:

答案 0 :(得分:1)

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

  • 删除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"

答案 1 :(得分:0)

这似乎是使用git submodules

的好地方