我一直在使用git子树扩展(https://github.com/apenwarr/git-subtree).我使用"--squash"来使主项目的日志干净,我的步骤如下:
将lib添加到主项目中
git subtree add -P sub/libdir --squash lib_remote master
从lib获取更新
git subtree pull -P sub/libdir --squash lib_remote master
将更改推送到lib_remote
git subree push -P sub/libdir --squash lib_remote master
它对我来说非常好(主要项目和lib,有一个很好的历史).问题是git子树推送的时间越来越长.
我使用git-subtree的目的与Screndib几乎相同,Screndib要求 git-subtree不保留历史,所以我不能推动子树更改,我怎样才能解决这个问题/将来避免这个问题?
我想,当使用--squash时,每次处理推送时,git子树需要搜索自"子树添加"以来的整个历史记录.
如何减少子树推送的时间?或者让它更有效,而不是整个历史,只有自上次git子树推送(或拉动)以来的流程变化?
我假设您的代码中的“lib_remote”是远程 lib 存储库的网址,而不是您当前存储库中的一个分支?当前存储库中的远程存储库 url 和分支都在工作。
我看到您正在使用git subtree add将远程库添加为子树,然后您只是使用git subtree push推送更改。
最好git subtree split在push操作之前先把子树的变化拆分成你当前repo中的一个单独的分支,然后把拆分的分支推送到远程repo,保持这个拆分的分支存在,每次push之前,做一个git subtree split操作再次,这将从您上次拆分的点构建子树的历史记录,速度会快得多。否则,如果没有像您那样进行拆分,git subtreee 必须从您添加的点开始构建子树的历史记录,只要子树提交增长,构建的时间就会越来越长。
如果不是边--squash添加边使用,可以考虑边--rejoin拆分边使用,这样会快很多。
所以,步骤应该如下。
将lib添加到主项目中
git subtree add -P sub/libdir --squash lib_remote_url master
从 lib 获取更新
git subtree pull -P sub/libdir --squash lib_remote_url master
将子树更改拆分为单独的分支
git subtree split -P sub/libdir -b lib_remote_branch
将更改推送到 lib_remote
git push lib_remote_url lib_remote_branch:master
保持 lib_remote_branch 存在,下次推送时重做第 3 步和第 4 步。
| 归档时间: |
|
| 查看次数: |
1704 次 |
| 最近记录: |