如果我从主存储库中拆分一个子树并创建一个新的存储库,我的旧拉取请求会怎样?

What will happen to my old pull requests if I split a subtree off my main repo and create a new repo?

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

也就是说,假设我继续采用这种方法,我在 Github 中的旧拉取请求(包括分离目录中的代码)会怎样?

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

感谢您的帮助。

来自 git subtree split 的新创建的存储库将 仅包含您在指定目录中所做更改的提交

假设原始 git 回购文件结构如下:

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 存储库,则只有更改 subfolder 的提交(file3file4) 将显示在新的 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

正如您在原始 repo 中看到的那样:

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