如何将变更集从离线计算机推送/拉出到服务器?

时间:2015-07-12 15:30:19

标签: git version-control

我正在处理的软件项目最近从ClearCase迁移到Git。我仍在学习基础知识,所以一旦我更熟悉Git及其功能,这个问题可能会在以后解决。

我的问题是:对于无法连接到中央存储库(即没有网络连接)的开发人员机器,Git是否有良好的工作流机制?

详情

我们的办公室(位置A)有一个集中的Git存储库/服务器。大多数开发人员都可以直接连接到服务器,无论是通过办公室的局域网还是通过VPN。此项目的安全策略不允许从LAN外部到服务器的任何直接ssh / https连接 - 在这种情况下,一切都必须通过VPN。

团队中的开发人员正在客户的工厂(位置C)进行现场工作。开发人员将在位置C处开发仅在离线状态下的开发机器,并且可以使用介质(CD或DVD)将数据传入和传出机器。开发人员需要在离线机器上有一两个代码,因为他将进行错误修复,为客户提供原型设计功能,并充当项目的前线代表。

开发人员还将在家中拥有一台机器(位置B),他可以使用VPN连接到位置A,并从中央仓库连接到推送/拉取。我们测试了这个,这很好。

我们正在尝试确定是否可以使用DVD更新位置C的计算机上的存储库。目前的报告是大约1.6GB的源和3GB的第三方二进制文件(由于各个模块之间存在大量的互连,我们还没有打破它。这是一个25年以上的传统R& D代码库)。在初始克隆之后,为了更新/拉取更改,我们是否需要将整个源刻录到磁盘,或者我们是否可以使用补丁/存档来提高效率?如果可能的话,我想在位置C透明地维护计算机上的历史记录(我知道应用修补程序会对它进行提交,但我不相信它会为修补程序中的每个项目提取整个提交历史记录)。

我们还需要朝着相反的方向前进(因此我希望保持历史)。需要将错误修复/功能推送回中央存储库,导出数据的唯一方法是通过DVD。我们需要将整个存储库刻录到磁盘上,还是只能通过差异来实现?在这种情况下,保持版本历史记录不太重要,但我想尽可能保留它。

我们现在正在测试各种方法(Git只为我们活了大约3个工作日),所以我缺乏很多“我们尝试过的东西”。我想看看是否有人这样做或做过类似的事情并收集工作流程,工具等的任何建议,以使这更容易。在理想的世界中,一旦我们在位置C设置了存储库,我希望通过CD / DVD向开发人员提供小的更新(只有自上次拉动后的更改集)。

细节:Developer Machine将是Windows 7 x64,Central Repository是Atlassian Stash,团队通常使用SourceTree(但开发人员正在学习Git的Bash命令以便真正理解它)。我们愿意运行脚本,

我确实看过this question,它暗示补丁文件是一种可行的方式;但是,要求是不同的。

2 个答案:

答案 0 :(得分:9)

您可以将.git文件夹压缩并将其传输到其他位置(例如刻录在DVD上)。这将允许您获取内部源。您也可以将其解压缩并使用git pull ../somewhere/unpackedgit进行更改。

但是,您可以使用git bundle命令创建基本上脱机推送的内容,这是恢复更新所需的内容。 The git pro-book详细解释了如何执行此操作,并对此进行了介绍:

  

因此情况是:你需要偷窃一个git push。也许你的   网络已关闭,您希望将更改发送给您的同事。   也许你现场在某个地方工作而且无法访问   出于安全原因,本地网络。也许你的无线/以太网卡   刚破了。也许你无法访问共享服务器   那一刻,你想通过电子邮件发送一些你不想要的更新   通过format-patch传输40个提交。

     

输入git bundle。 bundle命令将打包所有内容   通常会通过git push命令将其推到线上   二进制文件,你可以发送电子邮件或sneakernet,然后解开   进入另一个存储库。

" sneakernet"是俚语用于在电脑之间移动文件(穿着运动鞋)"以及#34;以太网"。

答案 1 :(得分:0)

如果您想转移上一次提交的用途

git bundle create ../b1.bundle HEAD~..HEAD

(有很多方法可以描述捆绑提交的范围。)

这将创建文件../b1.bundle。您可以将许多提交捆绑到一个捆绑文件中。然后以某种方式将捆绑文件传输到另一个系统。在该系统上运行

git bundle unbundle ../b1.bundle

这将在git repo中创建并打印为分离提交的提交。假设此命令已打印:

3db621f037d15cf00ad5f92b96cdd189c761a8f8

然后将此提交合并到您的分支中:

git merge 3db621f037d15cf00ad5f92b96cdd189c761a8f8

如果您在联机系统中进行了一些更改,则可以将它们捆绑在一起,并将其重新带到脱机系统中。