我如何 push/pull 从离线机器到服务器的变更集?
How do I push/pull changesets from an offline machine to a server?
我正在从事的软件项目最近从 ClearCase 迁移到了 Git。我仍在学习基础知识,所以这个问题可能会在我更熟悉 Git 及其功能后得到解决。
我的问题是: Git 对于无法连接到中央存储库(即没有网络连接)的开发人员机器是否有良好的工作流机制? ?
详情
我们的办公室(位置 A)有一个集中的 Git repository/server。大多数开发人员将能够直接连接到服务器,无论是通过办公室的 LAN 还是通过 VPN。该项目的安全策略不允许从 LAN 外部直接 ssh/https 连接到服务器 - 在这种情况下,一切都必须通过 VPN。
团队中的一名开发人员正搬到客户设施(位置 C)的现场工作。开发人员将在位置 C 的开发机器上工作,该机器仅处于离线状态,并且可以使用媒体(CD 或 DVD)将数据传入和传出机器。开发人员需要在离线机器上有一个或两个代码分支,因为他将修复错误,为客户设计原型功能,并充当项目的前线代表。
开发人员还将在家里(位置 B)有一台机器,他可以在其中使用 VPN 和 push/pull 从中央仓库连接到位置 A。我们已经对此进行了测试,并且可以正常工作。
我们正在尝试确定是否可以使用 DVD 更新位置 C 机器上的存储库。当前的存储库是大约 1.6GB 的源代码和 3GB 的第三方二进制文件(由于各种模块之间的大量互连,我们尚未将其分解。它是一个 25 年以上的遗留研发代码库)。在最初的克隆之后,为了 update/pull 的变化,我们是否需要将整个源刻录到磁盘,或者我们可以使用 patches/archives 来提高效率吗?如果可能的话,我想透明地在位置 C 的机器上维护历史记录(我知道应用补丁会为其提交,但我不相信它会提取补丁中每个项目的整个提交历史记录)。
我们也需要朝相反的方向前进(因此我希望保留历史)。错误 fixes/features 将需要推回中央存储库,导出数据的唯一方法是通过 DVD。我们是否需要将整个存储库刻录到磁盘上,还是只能通过差异来完成?在这种情况下,保留版本历史就不那么重要了,但我想尽可能地维护它。
我们现在正在测试各种方法(Git 对我们来说只上线了大约 3 个工作日),所以我缺少很多 "what we've tried." 我想看看如果有人这样做过或做过类似的事情,请收集有关工作流程、工具等的任何建议,以简化此过程。在理想情况下,一旦我们在位置 C 设置了存储库,我希望通过 CD/DVD 向开发人员提供小更新(仅自上次拉取以来的变更集)。
Specifics: Developer Machine 将是 Windows 7 x64,Central Repository 是 Atlassian Stash,团队通常使用 SourceTree(但开发人员正在学习 Bash 命令 Git 才能真正理解它)。我们对 运行 个脚本开放,
我确实看过 ,它暗示补丁文件是一种可行的方法;但是,要求不同。
您可以压缩 .git 文件夹并将其传输到另一个位置(例如刻录到 DVD 上)。这将允许您获取内部源代码。您也可以解压缩它并使用 git pull ../somewhere/unpackedgit
获取内外更改。
但是,您可以使用 git bundle
命令来创建本质上是离线推送的内容,这是您恢复更新所需的内容。 The git pro-book 详细解释了如何做到这一点,并有这样的介绍:
The scenario is thus: you need to sneakernet a git push. Maybe your
network is down and you want to send changes to your co-workers.
Perhaps you're working somewhere onsite and don't have access to the
local network for security reasons. Maybe your wireless/ethernet card
just broke. Maybe you don't have access to a shared server for the
moment, you want to email someone updates and you don't want to
transfer 40 commits via format-patch.
Enter git bundle. The bundle command will package up everything that
would normally be pushed over the wire with a git push command into a
binary file that you can email or sneakernet around, then unbundle
into another repository.
"sneakernet" 是 "moving files between computers by foot (wearing sneakers)" 的俚语,也是 "ethernet".
的双关语
如果你想转移最后一次提交使用
git bundle create ../b1.bundle HEAD~..HEAD
(有很多方法可以描述捆绑提交的范围。)
这将创建文件 ../b1.bundle。您可以将许多提交捆绑到一个捆绑文件中。然后以某种方式将捆绑文件传输到另一个系统。在那个系统上 运行
git bundle unbundle ../b1.bundle
这将在您的 git 存储库中创建并打印提交作为分离提交。假设打印了这个命令:
3db621f037d15cf00ad5f92b96cdd189c761a8f8
然后将此提交合并到您的分支中:
git merge 3db621f037d15cf00ad5f92b96cdd189c761a8f8
如果您在在线系统中提取了一些更改,您可以将它们捆绑在一起并将它们也带回您的离线系统。
我正在从事的软件项目最近从 ClearCase 迁移到了 Git。我仍在学习基础知识,所以这个问题可能会在我更熟悉 Git 及其功能后得到解决。
我的问题是: Git 对于无法连接到中央存储库(即没有网络连接)的开发人员机器是否有良好的工作流机制? ?
详情
我们的办公室(位置 A)有一个集中的 Git repository/server。大多数开发人员将能够直接连接到服务器,无论是通过办公室的 LAN 还是通过 VPN。该项目的安全策略不允许从 LAN 外部直接 ssh/https 连接到服务器 - 在这种情况下,一切都必须通过 VPN。
团队中的一名开发人员正搬到客户设施(位置 C)的现场工作。开发人员将在位置 C 的开发机器上工作,该机器仅处于离线状态,并且可以使用媒体(CD 或 DVD)将数据传入和传出机器。开发人员需要在离线机器上有一个或两个代码分支,因为他将修复错误,为客户设计原型功能,并充当项目的前线代表。
开发人员还将在家里(位置 B)有一台机器,他可以在其中使用 VPN 和 push/pull 从中央仓库连接到位置 A。我们已经对此进行了测试,并且可以正常工作。
我们正在尝试确定是否可以使用 DVD 更新位置 C 机器上的存储库。当前的存储库是大约 1.6GB 的源代码和 3GB 的第三方二进制文件(由于各种模块之间的大量互连,我们尚未将其分解。它是一个 25 年以上的遗留研发代码库)。在最初的克隆之后,为了 update/pull 的变化,我们是否需要将整个源刻录到磁盘,或者我们可以使用 patches/archives 来提高效率吗?如果可能的话,我想透明地在位置 C 的机器上维护历史记录(我知道应用补丁会为其提交,但我不相信它会提取补丁中每个项目的整个提交历史记录)。
我们也需要朝相反的方向前进(因此我希望保留历史)。错误 fixes/features 将需要推回中央存储库,导出数据的唯一方法是通过 DVD。我们是否需要将整个存储库刻录到磁盘上,还是只能通过差异来完成?在这种情况下,保留版本历史就不那么重要了,但我想尽可能地维护它。
我们现在正在测试各种方法(Git 对我们来说只上线了大约 3 个工作日),所以我缺少很多 "what we've tried." 我想看看如果有人这样做过或做过类似的事情,请收集有关工作流程、工具等的任何建议,以简化此过程。在理想情况下,一旦我们在位置 C 设置了存储库,我希望通过 CD/DVD 向开发人员提供小更新(仅自上次拉取以来的变更集)。
Specifics: Developer Machine 将是 Windows 7 x64,Central Repository 是 Atlassian Stash,团队通常使用 SourceTree(但开发人员正在学习 Bash 命令 Git 才能真正理解它)。我们对 运行 个脚本开放,
我确实看过
您可以压缩 .git 文件夹并将其传输到另一个位置(例如刻录到 DVD 上)。这将允许您获取内部源代码。您也可以解压缩它并使用 git pull ../somewhere/unpackedgit
获取内外更改。
但是,您可以使用 git bundle
命令来创建本质上是离线推送的内容,这是您恢复更新所需的内容。 The git pro-book 详细解释了如何做到这一点,并有这样的介绍:
The scenario is thus: you need to sneakernet a git push. Maybe your network is down and you want to send changes to your co-workers. Perhaps you're working somewhere onsite and don't have access to the local network for security reasons. Maybe your wireless/ethernet card just broke. Maybe you don't have access to a shared server for the moment, you want to email someone updates and you don't want to transfer 40 commits via format-patch.
Enter git bundle. The bundle command will package up everything that would normally be pushed over the wire with a git push command into a binary file that you can email or sneakernet around, then unbundle into another repository.
"sneakernet" 是 "moving files between computers by foot (wearing sneakers)" 的俚语,也是 "ethernet".
的双关语如果你想转移最后一次提交使用
git bundle create ../b1.bundle HEAD~..HEAD
(有很多方法可以描述捆绑提交的范围。)
这将创建文件 ../b1.bundle。您可以将许多提交捆绑到一个捆绑文件中。然后以某种方式将捆绑文件传输到另一个系统。在那个系统上 运行
git bundle unbundle ../b1.bundle
这将在您的 git 存储库中创建并打印提交作为分离提交。假设打印了这个命令:
3db621f037d15cf00ad5f92b96cdd189c761a8f8
然后将此提交合并到您的分支中:
git merge 3db621f037d15cf00ad5f92b96cdd189c761a8f8
如果您在在线系统中提取了一些更改,您可以将它们捆绑在一起并将它们也带回您的离线系统。