如何创建两个Git存储库的差异,可以应用代替拉?

时间:2014-07-30 03:57:35

标签: git diff dvcs

我们对这种奇怪的情况感到困惑:公司政策的冲突我们必须通过一些工程来解决。

想象一下公司C,以及两名员工,Alice和Bob。 Alice是C的内部员工,Bob是第三方外包商/承包商。 Alice和Bob在同一个项目上工作,该项目存储在公司内部的Git服务器上。但是,现在公司政策禁止Bob访问内部服务器。它并不禁止Alice和Bob交换有关该项目的电子邮件,但现在必须以某种方式修改通过Git的协作。

以下是我们提出的一个解决方案:

  1. Bob在公司外部的机器上设置了一个本地Git存储库,并在那里进行更改。
  2. Alice将Bob的存储库用作遥控器,并将更改从那里拉到公司内部的机器。
  3. Alice将这些更改与公司中其他人(存储在内部Git服务器上)所做的更改同步。
  4. Alice向Bob发送了一封包含两个存储库的 diff 的电子邮件。
  5. Bob将此“diff”应用于其本地存储库。
  6. 我们的目标如下:在第5步之后,Bob的存储库应该在完全的状态下结束,就好像他刚刚从内部服务器执行简单的 git pull 在公司内部。现在的问题是,如何实现这一目标?我们可以为两个存储库准备什么样的“差异”?从本质上讲,有没有办法实现拉动期间交换的信息?

    当然,最简单的方法是通过电子邮件发送整个存储库的(压缩)副本,但这将是非常庞大且极其无效的。有没有更好的方法来实现这一目标?

    谢谢!

2 个答案:

答案 0 :(得分:1)

  

最简单的方法是通过电子邮件发送整个存储库的(压缩)副本,

您实际上可以通过增量方式执行此操作:发送git bundle(请参阅“How can I email someone a git repository?”)。

我详细介绍了在“Transferring changes made to multiple branches using git-bundle”中执行增量捆绑的方法 最简单的是按日期:

cd myRepo
git bundle create mybundle-inc --since=10.days --all

这个想法是生成一个文件,你可以从中提取(好像那个文件是一个git repo)。

答案 1 :(得分:0)

除了发送@VonC回答的Git包之外,如果Alice可以访问Bob的PC,那么他可以设置一个裸存储库,Alice推送她的更改。这个裸存储库基本上是公司内部存储库的镜像。

除此之外,我不知道这个荒谬的政策应该达到什么目的。无论有没有,Bob都会拥有相同的数据(如果Alice推送/发送捆绑包)