git:需要在一个分支上构建并将该分支合并到另一个分支

时间:2015-09-30 19:49:23

标签: git

我们的构建需要很长时间。单元测试约4小时。 我正在尝试在master上构建和运行单元测试。同时我需要将master合并到分支A。

有没有办法不改变文件系统上文件的样子并合并到另一个分支

---------\-----master
          \----A

类似“git merge from_branch to_branch”或“git merge to_Branch from_Branch”我已经观察过alais的一些帖子,但看起来他们做了一个“git checkout A; git merge master”,这不是我想要做的。无法结账,因为我有进程需要访问主文件

中的文件

感谢

2 个答案:

答案 0 :(得分:2)

同意@Schwern,解决此问题的最简单方法是获取存储库的克隆。

有时候,您可能会发现copied workdir更方便,而不是完整克隆。特别是,您不必在这两个本地git存储库之间进行拉/推。

最好的解决方案是CI服务器。这种中间解决方案可以在docker中进行这样的构建,只要你可以使用它并且可以在linux上运行你的测试。

答案 1 :(得分:1)

  

我们的构建需要很长时间。单元测试约4小时。我正在尝试在master上构建和运行单元测试。同时我需要将master合并到分支A。

有一些好的做法可以消除这个问题。首先是不对master起作用,而是专门针对特征分支。 master仅应用于启动新功能分支和集成已测试的功能分支。这个非常好的练习解决了很多问题。

- B - C - D [master]
           \
            E - F - G [feature]

使用git merge master让您的功能分支与master中的更改保持同步(或git rebase master,以避免大量不必要的合并点)。可以安全地推送功能分支而不会危及其他分支。

其次是使用continuous integration server。也就是说,拥有一台专用机器,除了推送到中央存储库之外,它只能构建和运行完整的测试套件。这样做的好处是可以提供尽可能接近真实生产环境的环境(而不是开发机器上的任何环境)。 Travis CI是CI服务的示例,Jenkins是开源可安装CI服务器。

请注意,您可以在自己桌面上的虚拟机上运行自己的CI服务器。

有了这些,您不再需要等待长时间的测试才能完成。您可以安全地推送功能分支,CI服务器运行测试。同时,您可以使用开发副本执行任何操作。

如果您不想做所有这些并希望继续使用master并在开发计算机上运行长测试,最简单的解决方案是克隆您的开发副本到新的位置进行测试。克隆您的开发副本,而不是共享远程副本,意味着它将拥有您的工作和分支。

git clone /path/to/my/devel /path/to/my/tests

/path/to/my/tests中运行测试,并在/path/to/my/devel进行开发。