快速背景:我们是一个小型的网络代理(任何时候都有3-6个开发人员),开发中小型Symfony 1.4站点。我们使用git已经一年了,但以前使用过Subversion。
在过去的6个月中,我们已经投入了大量的开发时间在中央Symfony插件,为我们的定制CMS。这个插件包括一些特性,帮助,基类等,我们使用这些功能来构建自定义功能。这个插件存储在git中,但是随着插件在各种产品中的使用,并且不断地从/推到插件中,这个插件的分支非常广泛。存储库通常用作主要项目中的子模块。
我们现在开始看到的问题是,开发人员在自己的项目上下文中添加自定义功能,给存储库带来了大量的合并冲突和向后不兼容的更改。
过去,我读过文森特·德里森的优良git分支模型并成功地将它用于项目,但它似乎不太适用于我们的特定情况;我们有许多项目同时使用相同的核心插件,同时为其开发新特性。
我们需要的是一项提供以下内容的战略:
如有任何建议或讨论,将不胜感激。
发布于 2012-07-09 08:50:25
当我每天处理这类事情时,我感觉到了你的痛苦。我的情况是必须维护一个开源项目的多个客户版本,每个版本都有不同的插件、核心黑客等等。如果你有50个插件,那就不好玩了。
我还没有找到理想的(完全干净的)解决方案,但我对GitFlow的修改如下:
使用git有一个额外的好处,因为我们现在可以在所有生产服务器上运行cron作业,检查git repos中未分阶段的文件。我们现在知道支持人员是否在没有告诉任何人的情况下就在服务器上讨论生产代码,这就避免了很多麻烦:)
希望这能帮上忙。
发布于 2013-11-04 20:42:36
这个流程的主要错误是创建客户分支!唯一可能的分支是新的库特性,而不是客户特性。
它是一个公共库,所以它应该提供可以被客户类覆盖的API (来自特性请求)。但是这个定制的类应该在客户端主项目存储库中!
您的开发人员编写的代码耦合程度太高。阅读有关代码模块化、注入、接口等方面的文章,这将大大减轻您的痛苦!
第二件事是图书馆的适当流程。您应该开发版本化库(例如0.5、0.7、1.0、1.2)。库的问题是不同项目的版本使用情况不同。Git流并不以正确的方式支持这一点(只支持最后的版本和当前的开发)。我只是在为这种流寻找合适的支持工具。
总结-你主要的痛苦在于错误的库代码。您的开发人员必须使用默认行为编写代码,不要使用客户端行为,并使用API允许覆盖默认行为。
发布于 2012-07-09 08:20:29
共享代码的开发和维护成本更高。它必须在多个场景中工作;它必须向后兼容;它应该有测试用例,以确保更改不会破坏现有的客户端。
通常情况下,只有在三个或三个以上的地方使用共享功能才值得。
developers adding custom functionality in the context of their own project.一个或两个项目的自定义更改不应使其成为共享代码。如果允许这样做,共享代码将迅速增加复杂性,直到无法维护的程度。没有任何工作流能够帮助解决这个问题。
https://softwareengineering.stackexchange.com/questions/156082
复制相似问题