我正在处理的软件项目最近从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,它暗示补丁文件是一种可行的方式;但是,要求是不同的。
答案 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
如果您在联机系统中进行了一些更改,则可以将它们捆绑在一起,并将其重新带到脱机系统中。