如果我将主要仓库中的子树拆分并创建新的仓库,我的旧拉动请求会发生什么?

时间:2017-09-27 15:01:42

标签: git github pull-request git-subtree git-rewrite-history

我有一个庞大的代码库,我正在评估将某些部分拆分为较小的存储库的策略。使用git子树拆分,我能够分离出我想要的目录和放大器。提交历史似乎完好无损。

话虽如此,假设我继续采用这种方法,Github中我的旧拉请求(包括来自分离目录的代码)会发生什么?

他们是否仍会显示对旧代码的引用,或者更改是否仅引用仍在原始代码库中的代码?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

来自git subtree split的新创建的回购仅包含您在指定目录中进行更改的提交

假设原始的git repo文件结构如下:

Root
|___ file1      
|___ file2
|___ subfolder/
         |___ file3
         |___ file4

原始提交历史记录为:

*   8cb09fb (HEAD -> master) Merge branch 'dev' into matser
|\
| * e1e054c (dev) change file2 for fourth time merge
* | 6e8ee57 change file3 for fourth time merge
* |   ebdfb0b Merge branch 'dev' into master
|\ \
| |/
| * 5d93766 change file2 for thrid time merge
* | b95668a change file1 for thrid time merge
* |   09ca222 Merge branch 'dev' into matser
|\ \
| |/
| * d3dc890 change file3 for second time merge
* | 5818123 change file1 for second time merge
* |   cb39f04 Merge branch 'dev' into master
|\ \
| |/
| * 4dc4aaa change file3 and file4 on dev branch
* | fef775c change file3 and file4 on master branch
|/
* d8d81e6 add subfolder and it’s files
* 5446ea3  change file1

如果您使用git subtree splitsubfolder拆分为新的git repo,则只会更改subfolderfile3file4)的提交将显示在新的repo提交历史记录中。新的repo提交历史记录如下:

* 60a7f3e (master) change file3 for fourth time merge
*   954b730 Merge branch 'dev' into master
|\
| * b4b8d92 change file3 for second time merge
* |   35f7754 Merge branch 'dev' into matser
|\ \
| |/
| * fde1de3 change file3 and file4 on master branch
* | d4795a8 change file3 and file4 on master branch
|/
* cd367a2 add subfolder and it’s files

正如你在原始回购中看到的那样:

  • 对于第一次提交5446ea,它只更改了file1(在subfolder目录之外),因此提交将不会显示在新的回购中。
  • 对于提交5818123需要第二次合并,因为它也只更改了file1,提交将不会显示在新的回购中。
  • 对于第三次合并的提交(b95668a5d93766ebdfb0b),所有这些都不会更改subfolder,因此它们不会显示在新的回购。
  • 对于提交e1e054c,它只更改了file2分支上的dev,因此它不会显示在新的回购中。
  • 对于第四个合并提交8cb09fb,它将subfolderfile3file4)保持为与其第一个父提交6e8ee57相同的版本( master分支上没有更改子文件夹),因此提交也不会显示在新的仓库中。