我们所处的团队分散,团队成员属于不同公司,因此无法访问彼此的服务器。我们正在进行一个项目,并且有一个需要同步的git存储库。团队的两个部分(出于简便起见,都称他们为A团队B)。
我们没有可以同时访问两台服务器的系统,并且不太可能很快获得访问权限。
我们如何使存储库在不同位置之间保持同步?
到目前为止,我们一直在尝试以下方法,但收效甚微。
团队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的工作似乎没有什么用处。
因此,我们尝试了这些方法,但均无济于事。有谁知道如何解决这个问题?当然,我们希望每个人都在同一个原始存储库上工作,但由于目前和可预见的将来尚无规定,我们会寻求解决方案。
答案 0 :(得分:1)
Git旨在支持通过电子邮件进行的全功能协作。 Pro Git书中有chapter discussing this,但是基本上您可以使用git format-patch
生成更改,使用git imap-send
发送更改,然后使用git am
将更改应用到另一端。同一本书的另一章包含short example。
这可能感觉技术含量低,但这是一种成熟的工作流程,对于development of Git itself来说效果很好。
如果您的团队现在可以直接克隆存储库的初始副本,则可以generate a bundle with git bundle
and then clone from that。
如果您不喜欢电子邮件流,也可以use git bundle
to update isolated systems。一般来说,git bundle
可能比手动压缩克隆更好。