无需直接连接即可同步两个Git存储库

时间:2019-05-03 13:40:46

标签: git

我有两个git存储库,我需要对其进行同步而它们之间没有直接的网络连接。

我不能按原样使用git fetchgit push,因为它们两个都需要直接连接。补丁文件似乎也不可行,因为它们丢失了提交树结构。虽然,我发现git在后台使用git pack-objectsgit unpack-objects来生成和使用打包文件。

我能以某种方式使Git为我生成该packfile(如果我提供了所需的提交范围)然后使用它吗?也许有某种方法可以保留补丁中的结构?也许还有其他方法?

谢谢

2 个答案:

答案 0 :(得分:2)

尝试git bundle

捆绑软件用作只读存储库。要创建分支master的捆绑包,

git bundle create foo.bundle master

然后,您可以将foo.bundle移到另一个存储库所在的计算机上,并读取/获取所需的元数据。

cd <the_other_repository>
git checkout master
git pull <path_to_foo.bundle> master

# or maybe you want to cherry-pick a single commit
git fetch <path_to_foo.bundle> master
git cherry-pick <commit>

答案 1 :(得分:0)

即使没有远程存储库,Git版本也可以工作,您可以pushpull在您自己的计算机之间来回移动。有一个规则要遵循:两个存储库都必须具有共同的提交历史记录,下一个很简单。您只需要使用

添加一个新的remote
git remote add repo2 path/to/repo2/

path/to/repo2是您其他存储库(例如../../repo2)的相对路径。

然后:

git pull repo2 branch