Git 是否可以连贯地管理多个存储库?
我有一个独立版本但相互关联的git存储库集合。例如,在添加功能时,我可能必须向共享库添加功能,然后扩展应用程序或服务以利用该功能 目前,我必须在使用该功能时接触的每个存储库上创建一个分支。但是,我想做的是通过同时分支和合并这些多个存储库来简化流程(以减少忘记分支的可能性,或者在一个存储库中提交/合并,而不是在另一个存储库中提交/合并)Git 是否可以连贯地管理多个存储库?,git,multiple-repositories,Git,Multiple Repositories,我有一个独立版本但相互关联的git存储库集合。例如,在添加功能时,我可能必须向共享库添加功能,然后扩展应用程序或服务以利用该功能 目前,我必须在使用该功能时接触的每个存储库上创建一个分支。但是,我想做的是通过同时分支和合并这些多个存储库来简化流程(以减少忘记分支的可能性,或者在一个存储库中提交/合并,而不是在另一个存储库中提交/合并) 是否有一种简单的方法可以同时分支和合并多个存储库,或者这是一项更适合于帮助器脚本集合的任务?如果是后者,是否有任何可用的脚本已经完成了这一点?没有一种内置的方法可
是否有一种简单的方法可以同时分支和合并多个存储库,或者这是一项更适合于帮助器脚本集合的任务?如果是后者,是否有任何可用的脚本已经完成了这一点?没有一种内置的方法可以同时处理多个存储库,如果您考虑git的分布式特性,那么除了社会惯例之外,真的没有什么可以定义它。(考虑一下,如果有人在一个存储库中从您那里提取数据,但在第二个存储库中又从另一个远程数据,您是否可以获得这种一致性?) 您可能会发现这样的工具很有用,它可以同时处理多个存储库 如果你真的有那么紧密联系的东西,我建议你把它们放在一个存储库中。这样你就不会忘记任何一个步骤,因为它们发生在一个原子操作中
但是,如果您的代码实际上没有那么紧密地结合在一起,那么放弃“必须在完全相同的时间分支”的概念,您会更快乐。您可以使用repo工具:
- 在多个项目上设置同一分支
- 使用一个命令查看多个存储库(分支、未合并提交)的状态
- 使用清单文件管理一组存储库(克隆、同步等)
- 还有很多很酷的东西
- 它是用Python完成的(因此,在运行Python的任何操作系统中都能很好地工作:Linux、Win、Mac…)
- 除了同时对多个回购协议运行常见的git操作外,还提供了以下工作流:
- 克隆多个存储库
- 从repo打开url(因此,可以一次为多个repo创建pull请求)
- 使用winmerge或meld一次对多个回购进行差异更改
- 执行非git命令
- 就像一个想法。我自己还没有尝试过这个功能,但我在不久前发现了这个功能。
尝试将所有需要的存储库作为子模块添加到新的“根”存储库中,并使用以下命令
git submodule foreach --recursive <command>
git子模块foreach——递归
您可以咨询帮助,了解如何处理子模块。你可以使用任何你想要的命令。git和非git命令。管理跨多个存储库创建功能分支。但是,repo upload
命令只能发布到Gerrit code review
如果您使用像GitHub或GitLab这样的普通Git存储库管理器,repo-upload
将不起作用;您需要不存在的repo push
命令。我实现了回购推送。我们在生产中使用它
没有一种内置的方法可以同时处理多个存储库 但是会有 Git 2.27(2020年第2季度)为“
Git update ref--stdin
”铺平了道路,它学习了一些新动词,让用户更明确地控制ref-update事务
这有助于跨多个存储库实现两阶段提交式原子引用更新
参见,,,(2020年4月2日)和,(2020年3月30日)作者。(于2020年4月29日合并) :实现交互式事务处理 签字人:帕特里克·斯坦哈特 该命令现在只能通过其“
--stdin
”参数处理排队事务,但用户无法以更明确的方式处理事务本身
例如,在复制场景中,可以想象协调器为多个存储库生成git update ref
,并且只有当所有人都同意可以进行更新时,协调器才会发送提交
这样的事务会话可能看起来像
> start
< start: ok
> update refs/heads/master $OLD $NEW
> prepare
< prepare: ok
# All nodes have returned "ok"
> commit
< commit: ok
性能测试p1400.2
创建、更新和删除分支一千次,从而平均运行时间git update refs
超过3000次调用。p1400.3
调用git update refs--stdin
三次,分别对一千个创建、更新和删除进行排队
正如预期的那样,p1400.3
始终没有显示出明显的影响,因为对于每一批更新,都有一个访问(3P)的调用用于负钩子查找。另一方面,对于
p1400.2
,可以看到此补丁集造成的影响。但是,在执行五次性能测试时,每一次都是在GIT\u PERF\u REPEAT\u COUNT=10的情况下运行的,开销从-1.5%到+1.1%不等。这些不一致的性能数字可以用产生3000个进程的开销来解释。这表明组装钩子路径并执行一次访问(3P)以检查是否存在钩子路径的开销大部分被操作系统的开销所抵消
在Git2.29(2020年第4季度)中,通过消除无效的优化,钩子被简化了 参见作者(2020年8月25日)
(由年合并,2020年8月31日) :删除
引用事务的查找缓存
签字人:帕特里克·斯坦哈特
添加参考事务
钩子时,有人担心它可能会对不使用
> start
< start: ok
> create refs/heads/master $OLD $NEW
> prepare
< fatal: cannot lock ref 'refs/heads/master': reference already exists
# On all other nodes:
> abort
< abort: ok
Test origin/master HEAD
--------------------------------------------------------------------
1400.2: update-ref 2.70(2.10+0.71) 2.71(2.10+0.73) +0.4%
1400.3: update-ref --stdin 0.21(0.09+0.11) 0.21(0.07+0.14) +0.0%
Test master pks-reftx-hook-remove-cache
--------------------------------------------------------------------------
1400.2: update-ref 2.79(2.16+0.74) 2.73(2.12+0.71) -2.2%
1400.3: update-ref --stdin 0.22(0.08+0.14) 0.21(0.08+0.12) -4.5%
Test master pks-reftx-hook-remove-cache
--------------------------------------------------------------------------
1400.2: update-ref 2.70(2.09+0.72) 2.74(2.13+0.71) +1.5%
1400.3: update-ref --stdin 0.21(0.10+0.10) 0.21(0.08+0.13) +0.0%
Test master pks-reftx-hook-remove-cache
--------------------------------------------------------------------------
1400.4: nonatomic push 6.63(6.50+0.13) 6.81(6.67+0.14) +2.7%
1400.4: nonatomic push 6.35(6.21+0.14) 6.39(6.23+0.16) +0.6%
1400.4: nonatomic push 6.43(6.31+0.13) 6.42(6.28+0.15) -0.2%