首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用git-bundle保持开发同步?

如何使用git-bundle保持开发同步?
EN

Stack Overflow用户
提问于 2010-09-03 20:59:57
回答 2查看 32.8K关注 0票数 72

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

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

我已经阅读了git-bundle的帮助页面,它似乎是最好的工具,但我真的不确定如何才能建立一个好的工作流。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-04 03:58:30

捆绑!

git捆绑包的工作流程本质上与任何其他工作流程相同。这可能看起来不是非常有用的建议,但这里是:使用您通常使用的任何工作流程,并将“推/拉”替换为“在闪存驱动器上携带捆绑包到那里,然后拉”。

手册页实际上有一个很好的演练,可以很好地了解这一点,尽管它更像是一个单向示例。为了完整起见,这里是它的一个略微修改的版本,展示了如何双向移动信息:

代码语言:javascript
复制
# 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

要注意的关键一点是,您可以将包添加为远程,并像与任何其他远程交互一样与其交互。要更新遥控器,只需插入一个新的包,替换前一个包。

我还采取了一种略有不同的方法来选择基础。手册页使用标记,始终与传输到另一主机的最后一次引用保持最新。我只是简单地使用了远程分支,它将引用从另一个主机传输的最后一个ref。它的效率有点低;因为它落后了一步,所以最终会比需要的捆绑更多。但是闪存驱动器很大,捆绑包很小,使用你已经拥有的refs,而不是必须采取额外的步骤和小心标签,节省了大量的精力。

有一件事让捆绑包有点麻烦,那就是你不能推给它们,你也不能“改变”它们的基数。如果您想要基于新的基础上的包,您必须重新创建它。如果你想在其中添加新的提交,你必须重新创建它。这个麻烦引出了我的下一个建议。

拇指驱动器上的存储库

老实说,除非你的repo真的很大,否则这可能也很简单。将一个裸克隆放在拇指驱动器上,您可以从两台计算机上推送和拉出它。像对待你的网络连接一样对待它。需要转中央回购吗?插上电源!

票数 116
EN

Stack Overflow用户

发布于 2012-10-15 00:35:55

@Jefromi的回答很棒--比git文档好10倍,后者详细介绍了令人费解的需求和行为。

这仍然有点复杂,所以这里是最简单的同步一次的例子(在我的例子中:从:一台带坏wifi网卡的脱机笔记本电脑,到:一台可以上网的台式机)。根据@Jefromi的回答,这似乎很好用:

AHEAD =比提交次数领先的机器。BEHIND =要将提交复制到的计算机

代码语言:javascript
复制
1. AHEAD: git-bundle create myBundleName.bundle --branches --tags

两者:复制myBundleName.bundle (使用电子邮件、USB或其他任何方式)

在后面:(将文件myBundName.bundle放在项目文件夹之外的任何地方)

代码语言:javascript
复制
2. BEHIND: cd [the project folder]
3. BEHIND: git pull [path to the bundle file]/myBundleName.bundle master

只要在末尾包含分支名称(默认情况下,如果不使用分支,则为" master "),这似乎可以很好地工作,并且不会替换后面的任何内部引用-因此您仍然可以与原始主节点进行同步。

也就是说,如果后面有互联网接入,这样做仍然是安全的:

代码语言:javascript
复制
(OPTIONAL) 4. BEHIND: git push

...and它将更新主存储库,就好像您的更改是在本地完成的,就像平常一样,在后台进行。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3635952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档