我需要在不同的计算机上保持开发树的同步,它们之间没有网络连接。

我们有一个中央git存储库,我通常在办公室计算机上使用自己的克隆。有时我需要在另一台计算机上进行一些开发,该计算机永远不会连接到办公网络。没有计算机连接到互联网。可以在同步之间的两台计算机上进行开发。

我已经阅读了帮助页面 git-bundle, ,这似乎是最好的工具,但是我不确定如何设置良好的工作流程。

你能给我一些建议或指示吗?

有帮助吗?

解决方案

捆绑!

GIT捆绑包的工作流将与任何其他工作流程基本相同。这似乎不是很有帮助的建议,但是这里是:使用通常使用的任何工作流程,然后用“推送/拉”用“将捆绑包在此处乘闪存驱动器上的捆绑包,然后拉动”。

Man Page实际上有一个很好的演练,尽管它更像是一个单向的例子。为了完整性,这是它的一个稍微修改的版本,显示了如何将信息双向移动:

# on hostA, the initial home of the repo
hostA$ git bundle create hostA.bundle --branches --tags

# transfer the bundle to hostB, and continue:
hostB$ git clone /path/to/hostA.bundle my-repo
# you now have a clone, complete with remote branches and tags
# just to make it a little more obvious, rename the remote:
hostB$ git remote rename origin hostA

# make some commits on hostB; time to transfer back to hostA
# use the known master branch of hostA as a basis
hostB$ git bundle create hostB.bundle ^hostA/master --branches --tags

# copy the bundle back over to hostA and continue:
hostA$ git remote add hostB /path/to/hostB.bundle
# fetch all the refs from the remote (creating remote branches like hostB/master)
hostA$ git fetch hostB
# pull from hostB's master, for example
hostA$ git pull

# make some commits on hostA; time to transfer to hostB
# again, use the known master branch as a basis
hostA$ git bundle create hostA.bundle ^hostB/master --branches --tags
# copy the bundle to hostB, **replacing** the original bundle
# update all the refs
hostB$ git fetch hostA

# and so on and so on

要注意的关键是,您可以将捆绑包作为遥控器添加,并像其他任何遥控器一样与之交互。要更新该遥控器,只需放入一个新捆绑包,以取代上一个。

我还采取了稍有不同的方法来选择基础。该人页面使用标签,始终保持最新的最新状态,其中最后一个转移到另一个主机。我只是使用了远程分支,该分支将指转移的最后一个裁判 另一个主机。有点低效;您最终会捆绑超出您的需要,因为它落后了一步。但是闪存驱动器很大,捆绑包很小,并且使用您已经拥有的裁判,而不必采取额外的步骤,并且要小心标签可以节省很多精力。

使捆绑有些麻烦的一件事是,您不能向他们推荐,而您不能“重现”它们。如果您需要基于新的基础捆绑包,则必须重新创建它。如果您想要新的提交,则必须重新创建它。这种麻烦引起了我的下一个建议...

在拇指驱动器上存储

老实说,除非您的存储库真的很大,否则这可能同样容易。在拇指驱动器上放一个裸露的克隆,您可以从两台计算机上推到并从中拔出。像对待您的网络连接一样对待它。需要转移到中央仓库吗?插上电源!

其他提示

@Jefromi答案很棒 - 比Git文档要好10倍,Git文档详细介绍了不可理解的要求和行动。

它仍然有点复杂,因此这是一次最简单的案例同步(在我的情况下:来自:带有Wifi损坏卡的离线笔记本电脑到:带有Net访问的桌面)。根据 @jefromi的答案,这似乎很好:

前面=一定数量提交的机器。背后=机器您要将承诺复制到

1. AHEAD: git-bundle create myBundleName.bundle --branches --tags

两者:复制mybundlename.bundle(使用电子邮件,USB等)

背后:(将文件mybundname.bundle放置在您想要的任何地方 外部 项目文件夹)

2. BEHIND: cd [the project folder]
3. BEHIND: git pull [path to the bundle file]/myBundleName.bundle master

只要您在末端包括分支名称(默认情况下,如果您不使用分支“主”),这似乎可以正常工作,并且不替换后面的任何内部参考 - 因此您仍然可以与原始大师同步。

即,如果背后有互联网访问,那仍然是安全的:

(OPTIONAL) 4. BEHIND: git push

...它将更新主存储库,好像您的更改是在本地(如普通的)后面进行的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top