4

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

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

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

谢谢!

4

4 回答 4

1

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

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

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

于 2010-01-24T14:46:38.337 回答
1

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

我现在能想到的,如下:

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

于 2010-01-24T21:42:19.223 回答
0

你使用什么协议,git 还是 Http?

Git在使用 http 协议时很慢。如果您唯一的选择是 http 并且您需要 DVCS,您可以尝试Mercurial

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

于 2010-01-24T21:25:00.403 回答
0

我使用了sneakernet(好吧,carnet):取一棵本地的下游 git 树,然后将整个内容刻录到 DVD。在远程端,将 DVD 复制到磁盘。然后,如有必要,编辑 .git/config 的 [remote "origin"] 配置部分,以便 repo 仍然可以到达其上游。

于 2010-01-24T16:32:19.863 回答