如果我从主存储库中拆分一个子树并创建一个新的存储库,我的旧拉取请求会怎样?
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 split
将 subfolder
拆分为新的 git 存储库,则只有更改 subfolder
的提交(file3
和file4
) 将显示在新的 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中。
- 对于第三次合并的提交(
b95668a
、5d93766
和ebdfb0b
),它们都没有更改subfolder
,所以它们不会在新的 repo 中显示。
- 对于提交
e1e054c
,它只在 dev
分支上更改了 file2
,因此它不会显示在新的 repo 中。
- 对于第四次合并提交
8cb09fb
,它保持 subfolder
(file3
和 file4
)与其第一个父提交 6e8ee57
相同的版本](未更改子文件夹)在 master
分支上,因此提交也不会显示在新回购中。
我有一个大型代码库,我正在评估将某些部分拆分成较小存储库的策略。使用 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 split
将 subfolder
拆分为新的 git 存储库,则只有更改 subfolder
的提交(file3
和file4
) 将显示在新的 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中。 - 对于第三次合并的提交(
b95668a
、5d93766
和ebdfb0b
),它们都没有更改subfolder
,所以它们不会在新的 repo 中显示。 - 对于提交
e1e054c
,它只在dev
分支上更改了file2
,因此它不会显示在新的 repo 中。 - 对于第四次合并提交
8cb09fb
,它保持subfolder
(file3
和file4
)与其第一个父提交6e8ee57
相同的版本](未更改子文件夹)在master
分支上,因此提交也不会显示在新回购中。