fer*_*ith 16 git github git-subtree
我在我的项目中使用git,它包含几个子项目.每个子项目使用git-subtree命令在主项目中"链接" .这是我在git中实现"svn externals"的方式.我几周以来一直在使用它,但是在每次提交期间,将我的更改从子树推送到远程位置的时间都会增加.当我使用命令推送更改时,它看起来像这样
git subtree push -P platform/rtos rtos master
git push using: rtos master
1/ 215 (0)2/ 215 (1)3/ 215 (2)4/ 215 (3)5/ 215 (4)6/ 215 (5)7/ 215 (6)8/ 215 (7)9/ 215 (8)10/ 215 (9)11/ 215 (9)12/ 215 (10)13/ 215 (11)14/
....
20 more lines
....
(204)209/ 215 (205)210/ 215 (206)211/ 215 (207)212/ 215 (208)213/ 215 (209)214/ 215 (210)215/ 215 (211)To https://github.com/rtos/rtos.git
64546f..9454ce 9a9d34c5656655656565676768887899898767667348590 -> master
Run Code Online (Sandbox Code Playgroud)
有没有办法"清理"子树,从而减少推动更改的时间?
Lop*_*Sae 13
尝试使用该--rejoin标志,以便在拆分后将子树正确合并回主存储库.这样每次拆分都不需要经历所有历史记录.
git subtree split --rejoin --prefix=<prefix> <commit...>
Run Code Online (Sandbox Code Playgroud)
从原始子树文档:
拆分后,将新创建的合成历史记录合并回主项目.这样,未来的拆分只能搜索自最近的--rejoin以来添加的历史部分.
不,不幸的是没有。运行时git subtree push,它将重新创建此子树的所有提交。它必须这样做,因为它们的 SHA 取决于先前的提交,并且需要这些 SHA 能够将新提交链接到旧提交。它可以缓存它,但它没有。
我想这是您使用子树与子模块所付出的代价。子树在您的存储库中是非常无状态的,这在一方面很好,但另一方面会导致计算时间过长。子模块存储它们的所有信息,这需要您对其进行管理,但也使这样的事情变得更快。
Von*_*onC -6
请注意,如果您决定切换到git submodule,您现在可以,因为 git1.8.2 (2013-03-08)跟踪子模块 repo 的最新提交。
请参阅git 外部。
“git submodule”开始学习一种新模式来与远程分支的尖端集成(而不是与超级项目的 gitlink 中记录的提交集成)。
这可以实现更快的推送,同时受益于子模块在子树上拥有的附加信息(即子模块的特定提交的轻量级记录)
您可以使用以下命令将该子模块更新为给定分支的最新版本:
git submodule update --remote
Run Code Online (Sandbox Code Playgroud)
该选项仅对命令有效
update。
不要使用超级项目记录的 SHA-1 来更新子模块,而是使用子模块的远程跟踪分支的状态。
| 归档时间: |
|
| 查看次数: |
4729 次 |
| 最近记录: |