我有一个庞大的代码库,我正在评估将某些部分拆分为较小的存储库的策略。使用git子树拆分,我能够分离出我想要的目录和放大器。提交历史似乎完好无损。
话虽如此,假设我继续采用这种方法,Github中我的旧拉请求(包括来自分离目录的代码)会发生什么?
他们是否仍会显示对旧代码的引用,或者更改是否仅引用仍在原始代码库中的代码?
感谢您的帮助。
答案 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 split
将subfolder
拆分为新的git repo,则只会更改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
正如你在原始回购中看到的那样:
5446ea
,它只更改了file1
(在subfolder
目录之外),因此提交将不会显示在新的回购中。5818123
需要第二次合并,因为它也只更改了file1
,提交将不会显示在新的回购中。b95668a
,5d93766
和ebdfb0b
),所有这些都不会更改subfolder
,因此它们不会显示在新的回购。e1e054c
,它只更改了file2
分支上的dev
,因此它不会显示在新的回购中。8cb09fb
,它将subfolder
(file3
和file4
)保持为与其第一个父提交6e8ee57
相同的版本( master
分支上没有更改子文件夹),因此提交也不会显示在新的仓库中。