在具有相同基础的多个项目上使用git的最佳做法是什么?

时间:2016-02-11 04:36:35

标签: git

我在客户端上运行了一个使用git作为其版本控制的项目 过了一会儿,另一个客户希望同一个项目具有一些不同的功能。

然后,我想到了两个选项来管理git存储库中的新选项。

一,分叉存储库,或两个,创建另一个特定于新存储库的分支。

由于我是git的新手,我做了两个测试哪个更容易维护。我后来选择了第二个选项,因为在客户端中修复错误要容易得多,然后将其挑选到另一个分支(如果错误在另一个客户端中使用的功能中)。而且在IDE中切换分支似乎比有几个项目更容易。

但是,我仍然不相信这是几个项目的最佳实践,因为现在我有更多的客户(因此,更多的分支机构)。

使用分支每个功能真的很混乱,我想利用git的pull请求功能。我开始认为将个人资料库中的项目分开会更好 但是,如果我这样做,我仍然可以在IDE中使用单个项目吗?

如何将错误修复程序“推送”到另一个存储库,而无需在其他项目中重新编码(再次编写代码,复制粘贴或使用diff)?

我做对了吗? 或者有更好的方法吗?

提前谢谢。

3 个答案:

答案 0 :(得分:4)

版本控制不是解决这个问题的答案,这不是一个从未打算解决的问题。您应该为所有客户提供单一的代码库,并且应该以这样的方式构建您的功能,即可以在该代码库中打开和关闭它们。

这是否意味着将功能提取到可加载模块,或构建它们以使您的代码充满if/else语句由您自己决定,但任何一种解决方案都优于不同分支的爆炸式增长。每个客户端分支解决方案勉强比仅将每个客户端的整个代码库复制并粘贴到新目录更好。如果你需要独立维护一百个客户端和一百个不同的分支,那么由于版本控制你就不会有更好的选择。

答案 1 :(得分:2)

  

制作另一个特定于新存储库的分支      ...
  樱桃把它挑到另一个分支

这是正确的工作方式。使用分支机构时,您可以选择在分支机构之间共享代码。添加功能或修复错误后,您可以非常轻松地将其添加到您想要的任何所需分支。

所以分支是正确的方法。

  

然而,我仍然不相信这是几个项目的最佳实践,因为现在我有更多的客户(因此,更多的分支机构)。

  • 如果您希望对所有项目/产品使用相同的代码,则应使用分支机构。
  • 如果您有共享的部分代码,并且每个项目都有自己的一组功能,则应使用submodules

请记住,即使您使用不同的存储库,您仍然可以在不同项目之间使用cherry pick(在添加多个遥控器之后)。

  

使用每个功能分支是非常困惑的

这是使用git的推荐方法 Git flow这是git最常用的工作流程之一

  

如何将错误修复程序“推送”到另一个存储库,而无需在其他项目中重新编码(再次编写代码,复制粘贴或使用diff)?

Add several remotes到您的存储库,您可以同时使用

答案 2 :(得分:0)

对于较旧的客户端,您似乎需要单独的分支,而不是故意提供不同的功能,但他们刚开始使用旧版本而您不想强制它们使用较新的版本。那么你拥有的分支就是所谓的维护分支。我可以想象两种最明显的方法来管理它们:

  • 将较旧的维护分支批量合并为较新的一次,如果有多个则级联它们(v1进入v2,然后v2进入v3,然后v3进入主进程)。这依赖于假设维护分支的更改是次要的并经过充分测试,因此它们不应该破坏新分支中的任何内容。例如,这就是git项目本身所做的事情(它只有一个维护分支)。
  • cherry-挑选所有需要分支的更改。然后,您可以使用问题跟踪器来跟踪哪些更改在哪里,并且最好使用-x标记来标记提交的樱桃。通常,您首先在master中开发并稳定它们,但在某些情况下,使用维护分支会更方便。

例如,您可以开始阅读here。一般来说,没有最终答案可供选择。