如何在本地仓库中同时构建/测试代码,同时继续对其进行修改

问题描述 投票:4回答:1

我正在回购中工作,构建需要几个小时。在开发功能的下一部分时,我想构建该代码(在另一个包含正在构建的更改的仓库中)。

我无法分解任务。在单元测试中考虑“附加代码”可能会有所帮助。关于此存储库的不良因素的回复将无济于事。将我的代码视为重构使其更具模块化可能会有所帮助。

当前,我被周期性的时间谋杀以进行更改和构建它们。

是否有办法设置两个本地git repos并使第二个本地git仓库基于第一个的签入代码?

我想以这种模式发展:

  1. 开发仓库1中的代码
  2. 构建存储库1(时钟从2小时构建开始)
  3. 并行地,将更改从存储库1拉到存储库2
  4. 同时,对存储库2进行进一步的更改,但不会破坏存储库1中正在进行的构建
  5. 并行执行,在代码库2中完整的代码
  6. 构建在回购1中完成
  7. 从存储库2切换到存储库1

我有什么选择来实现这一目标?

我不喜欢上面的步骤,但是我有兴趣减少在难以置信的长时间运行时必须花时间不开发代码的时间。

git continuous-integration git-clone
1个回答
2
投票

您可以根据自己的情况和需求进行选择。选项1和2完全在本地计算机上运行,​​而选项3通过git服务器运行。

选项1:建立本地克隆

git clone /path/to/source-repo-dir /path/to/new-repo-dir将进行本地克隆。从git help clone

当要从中克隆的存储库位于本地计算机上时,此标志绕过正常的“ Git感知”传输机制,并通过复制以下内容来克隆存储库HEAD以及object和refs目录下的所有内容。 .git / objects /下的文件目录会被硬链接以节省空间。

即使您要克隆的存储库是本地的,它也将被配置为remote,并且像将其推送到git服务器(例如GitHub)一样,将其推入并推入。

[为了更容易保持直立,您可以将--origin选项与git clone结合使用,为其本地遥控器指定默认的“起源”以外的名称,特别是如果您习惯使用或已经使用该名称作为实际的上游远程回购。

我可能会使用下游克隆进行构建,并在上游存储库上进行我的开发,但是如果您愿意,也可以采用其他方法。您甚至可以通过将新的回购作为远程回购添加到原始回购中来使关系对称(这样它们就彼此都是远程的)。

[另请参阅git help clone了解信息,例如关于--no-hardlinks--shared选项,但我建议坚持使用默认值。


选项2:使用git worktree

此选项使您可以有一个本地存储库,但可以有两个或多个单独的工作树。

此方法的主要限制是没有两个工作树可以签出相同的分支

。如果您的持续集成工作树需要与开发工作树在同一分支上,那么这可能对您不起作用。有关更多详细信息和解决方法,请参见this answer

请参阅Multiple working directories with Git?了解更多信息。


选项3:通过中央遥控器(例如,私人git服务器或GitHub)

如果将代码推送到远程“上游”存储库,只需对其进行新的克隆即可。这与选项1完全相同,不同之处在于,要同步两个本地克隆之间的更改需要向上游回购推送和从上游回购回购的附加步骤。如果您仍在执行此操作,或者正在团队中工作,并且希望您的队友甚至在完成漫长的构建之前就看到新的代码,那么这就是要走的路。

这是团队进行持续集成的方式。他们通常有专用的计算机来监视中央仓库,并在监视的分支更新时启动持续的集成构建和测试。

您也许还可以利用持续集成服务(例如GitHub上的Travis)。

© www.soinside.com 2019 - 2024. All rights reserved.