创建镜像Git存储库而不传输对象

时间:2010-01-24 14:28:11

标签: git mirroring

我有一大堆文件(50GB),它们位于远距离的两台主机上,我想将它们放在几个Git存储库中,这样每一个都是另一侧的repo的镜像回购。但我不想通过网络传输文件,因为它需要很长时间(50-60小时)而且由于文件已经在双方都没有必要。

我的想法是在每一侧创建一个Git仓库,将每一侧的所有文件添加到本地仓库,然后从一个到另一个git-pull。我认为Git足够聪明,知道文件(对象)是相同的而不是传输它们。但它似乎并不是因为在一个小样本上,需要很长时间才能完成拉动(主要是在“解包对象”阶段)并且它最大化了两者之间的网络连接。所以在我看来,它正在不必要地转移Git对象。

有没有人知道如何在不实际传输文件的情况下执行此操作?

谢谢!

4 个答案:

答案 0 :(得分:1)

有趣的是,这可能有效,因为大文件的内容是相同的(我假设)并且应该在两端创建相同的目标文件。

在我的本地计算机上对两个repos进行测试表明,不同存储库中的同一文件将具有相同的SHA ID。

检查并查看两个存储库中实际文件的SHA ID是否相同。如果他们是,那么我们需要弄清楚为什么他们可能会被转移,如果没有,那么找出原因。

答案 1 :(得分:1)

您需要提交相同的内容。即使树ID相同,提交ID也可能不同。

我现在能想到的是以下内容:

在一边进行(初始)提交。注意它的哈希。在.git/objects/文件夹中找到哈希值。将文件复制到另一台PC。如果另一台PC有一个具有相同id的树,它应该工作

答案 2 :(得分:0)

我用sneakernet(好吧,carnet):拿一个你当地的下游git树把整个东西烧成DVD。在远程端,将DVD复制到磁盘。然后,如有必要,编辑.git / config的[remote“origin”]配置部分,以便repo仍然可以到达其上游。

答案 3 :(得分:0)

你使用什么协议,git或Http?

Git是slow when using the http protocol。如果您唯一的选择是http并且您需要DVCS,则可以尝试Mercurial

如果你需要做的就是同步两个远程文件夹,你可以看看Beyond Compare