Git 是否可以连贯地管理多个存储库?

Git 是否可以连贯地管理多个存储库?,git,multiple-repositories,Git,Multiple Repositories,我有一个独立版本但相互关联的git存储库集合。例如,在添加功能时,我可能必须向共享库添加功能,然后扩展应用程序或服务以利用该功能 目前,我必须在使用该功能时接触的每个存储库上创建一个分支。但是,我想做的是通过同时分支和合并这些多个存储库来简化流程(以减少忘记分支的可能性,或者在一个存储库中提交/合并,而不是在另一个存储库中提交/合并) 是否有一种简单的方法可以同时分支和合并多个存储库,或者这是一项更适合于帮助器脚本集合的任务?如果是后者,是否有任何可用的脚本已经完成了这一点?没有一种内置的方法可

我有一个独立版本但相互关联的git存储库集合。例如,在添加功能时,我可能必须向共享库添加功能,然后扩展应用程序或服务以利用该功能

目前,我必须在使用该功能时接触的每个存储库上创建一个分支。但是,我想做的是通过同时分支和合并这些多个存储库来简化流程(以减少忘记分支的可能性,或者在一个存储库中提交/合并,而不是在另一个存储库中提交/合并)


是否有一种简单的方法可以同时分支和合并多个存储库,或者这是一项更适合于帮助器脚本集合的任务?如果是后者,是否有任何可用的脚本已经完成了这一点?

没有一种内置的方法可以同时处理多个存储库,如果您考虑git的分布式特性,那么除了社会惯例之外,真的没有什么可以定义它。(考虑一下,如果有人在一个存储库中从您那里提取数据,但在第二个存储库中又从另一个远程数据,您是否可以获得这种一致性?)

您可能会发现这样的工具很有用,它可以同时处理多个存储库

如果你真的有那么紧密联系的东西,我建议你把它们放在一个存储库中。这样你就不会忘记任何一个步骤,因为它们发生在一个原子操作中


但是,如果您的代码实际上没有那么紧密地结合在一起,那么放弃“必须在完全相同的时间分支”的概念,您会更快乐。

您可以使用repo工具:

  • 在多个项目上设置同一分支
  • 使用一个命令查看多个存储库(分支、未合并提交)的状态
  • 使用清单文件管理一组存储库(克隆、同步等)
  • 还有很多很酷的东西
另外,看看:——这是一个像mr和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%