同步 git 存储库,而无需相互访问,也无法从任何系统访问两者

  • 本文关键字:访问 任何 系统 存储 git 同步 git
  • 更新时间 :
  • 英文 :


我们处于分布式团队的情况,其中团队成员来自不同的公司,并且无权访问彼此的服务器。我们在一个项目上工作,并且有一个需要同步的 git 存储库。团队的两个部分(出于简单起见,称他们为团队 A 或 B)都在进行更改。

  • 团队 A 有权访问服务器 A,但不能访问服务器 B
  • 团队 B 有权访问服务器
  • B,但不能访问服务器 A

我们没有可以访问这两个服务器的系统,并且不太可能很快获得它。

我们如何使存储库在不同位置之间保持同步?

到目前为止,我们一直在尝试以下方法,但收效甚微。

A队:

  • git clone --mirror https://server_a.com/repository_origin.git获取完整副本,包括原始存储库中的所有分支和标签

  • 将生成的文件夹包装在 zip 文件中并传输到团队 B

B队:

  • 提取压缩

  • cd repository_origin.git

  • git remote set-url --push origin https://server_b.com/repository_mirror.git

方法

    • git push --mirror导致团队 B 的更改被完全丢弃,但团队 A 的所有更改都已合并到镜像仓库中,即团队 B 的更改不在镜像仓库中。
    • git fetch --all正确获取团队 B 的所有本地更改
    • git push --mirror结果是说没有更改,即团队 A 更改不在镜像存储库中。

显然,我们还需要将更改从团队 B 更改为原始存储库,但是如果没有从 A 到 B 的方式按预期工作,尝试让 B 到 A 按预期工作似乎不是很有用。

因此,我们尝试了这些方法,但都没有奏效。有没有人知道如何解决这个问题?当然,我们希望每个人都在同一个原始存储库上工作,但由于法规,这在目前和可预见的未来是不可能的。

Git 旨在支持通过电子邮件进行全功能协作。Pro Git 书中有一章讨论这个问题,但基本上您可以使用git format-patch生成更改,将它们与git imap-send一起发送,并使用git am将它们应用于另一侧。同一本书的另一章包括一个简短的例子。

这可能感觉技术含量低,但它是一个成熟的工作流程,对于 Git 本身的开发效果很好。

如果您的团队无法直接克隆存储库的初始副本,则可以生成一个包含git bundle的捆绑包,然后从中克隆。

如果您不喜欢电子邮件流,还可以使用git bundle来更新隔离的系统。一般来说,git bundle可能比手动压缩克隆更好。

相关内容

最新更新