1

我在机器A上有 git 存储库A(它又是由开发团队托管的“中央”存储库的克隆)。由于各种原因,我不喜欢在机器A上进行开发(开发工具很差),而是想在机器B上进行开发。两者是/可以通过网络传输文件(即虚拟sneakernet)连接,但是对于本题范围之外的各种复杂的防火墙相关问题,我无法使用ssh、http等直接连接。也无法将可移动驱动器/USB 记忆棒等连接到机器A。

有没有一种简单的方法可以将存储库克隆到机器B上,然后在本地分支上进行多次提交开发,一旦完成,通过转移将更改从该分支移动/推送到机器A上的相应分支单个文件,而不是使用git push/git pull等连接到远程机器?换句话说,我可以让它们与某种增量文件/包文件/等保持同步吗?

我曾想过将机器B上的更改扁平化,使用git rebase -i, 为一个更改,然后传递差异,但我更愿意保留我的 git 历史记录。

4

3 回答 3

3

使用git bundle.

一些工作流要求将一台机器上的一个或多个开发分支复制到另一台机器上,但两台机器不能直接连接,因此无法使用交互式 git 协议(git、ssh、rsync、http)。该命令提供对 git fetch 和 git pull 的支持,通过在源机器上将对象和引用打包到存档中,然后在通过某种方式(例如,通过sneakernet)移动存档后使用 git fetch 和 git pull 将它们导入另一个存储库. 由于存储库之间不存在直接连接,因此用户必须为目标存储库持有的捆绑包指定基础:捆绑包假定基础中的所有对象都已在目标存储库中。

于 2013-05-08T14:18:16.920 回答
1

从 R1 到 R2的每次提交都可以生成一个补丁:B

git format-patch master --stdout R1..R2 > big.patch

您可以将其应用于A

git am -3 big.patch
于 2013-05-08T14:10:41.280 回答
0

我以前做过。可能最简单的做法是在您选择的可移动存储设备上制作您的存储库的另一个副本。然后,您可以将其添加为远程,并在两台机器上推送和拉取更改。

于 2013-05-08T14:13:59.157 回答