Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨多个项目使用git标记管理不同的软件版本_Git_Git Tag_Git Patch - Fatal编程技术网

跨多个项目使用git标记管理不同的软件版本

跨多个项目使用git标记管理不同的软件版本,git,git-tag,git-patch,Git,Git Tag,Git Patch,我最近遇到了一个我不能完全解决的问题。我们公司在许多其他项目中,围绕一个项目开发了一组项目,我们称之为引擎。该引擎包含使用MVC框架yii的大部分代码库。还有多个其他项目使用引擎作为基础。虽然它们也可以包含唯一的代码,但它们主要使用或扩展引擎中的方法和类,这些方法和类是专门为客户机的规范定制的(在合理的范围内)。这些项目虽然相似,但可以包含独特的部分,使它们彼此不同。我要说的是,每个项目都有30-40%的独特代码库 在过去的几个月里,我们在发布和更新方面遇到了一些困难。每当客户请求一个新功能时,

我最近遇到了一个我不能完全解决的问题。我们公司在许多其他项目中,围绕一个项目开发了一组项目,我们称之为引擎。该引擎包含使用MVC框架yii的大部分代码库。还有多个其他项目使用引擎作为基础。虽然它们也可以包含唯一的代码,但它们主要使用或扩展引擎中的方法和类,这些方法和类是专门为客户机的规范定制的(在合理的范围内)。这些项目虽然相似,但可以包含独特的部分,使它们彼此不同。我要说的是,每个项目都有30-40%的独特代码库

在过去的几个月里,我们在发布和更新方面遇到了一些困难。每当客户请求一个新功能时,我们必须以一种不干扰其他项目的方式来开发它。大多数情况下,这不是一个问题,但有时可能会导致意外的错误或延长开发时间

不过,最令人头痛的还是在发行之前。虽然我们可以及时地将它们推出,但测试新代码对所有项目的影响可能需要比我们希望的更多的时间(我们正在编写单元测试和selenium测试,以加快处理速度,还因为如果我们想管理这么大的代码库并保持理智,这是合理的做法……不幸的是,我们严重落后于管理层,因为管理层认为我们可以稍后再做……)

我们使用git作为我们的版本跟踪系统,至少我希望它能够处理类似的事情。我们的首席程序员管理着很多类似结构的项目:多个站点运行一个中央引擎(两个引擎用于两个完全不同的目的)。他在几年前就遇到了同样的问题,并开始使用git标签来管理更重要的版本。一些客户的网站使用引擎的1.3版本,另一些使用引擎的1.4版本等等。虽然这个系统使推送更新和错误修复变得更容易、更快,但从长远来看,我认为这不实用。或者说这是最佳实践

似乎“我的”引擎应该使用相同的系统,这样我们可以享受更快的开发周期,但我想知道是否有更好的方法

我的主要问题是:我们能跟上这种方法多久?虽然我理解只将新代码推送到需要它的项目中的好处,但为每个主要功能创建一个新版本似乎很快就会失控

另外,我们应该如何处理对现有代码的修复和更新?我的理解是,在1.2上修复某些东西并不能修复1.3和1.4上的错误-或者我弄错了吗?或者我应该在1.4上修复它吗?有没有一种方法可以让我很容易地将特定更改应用到较旧/较新的版本,这样我就不必多次进行相同的更改在旧版本上启用为1.5编写的函数怎么样

我开始考虑使用修补程序将修补程序提供给每个需要它们的版本,但我不确定这是否是一个好主意

或者我应该只说“f*ck it”,只在最新版本上修复bug,一个接一个地升级项目,这样当我们能够确保它们不会破坏特定系统上的任何东西时,它们就会得到修复

我迷路了。虽然我已经找到了关于git标签和补丁的资源,但我觉得我还没有找到解决问题的真正解决方案。一个有用的解决方案不会破坏任何东西(我99%确定我们必须保持当前一个中央引擎支持多个项目的设置),并且是可持续的。目前,我们只讨论围绕引擎建造的少数几个站点,但今年已经有了更多的计划,随着开发时间的缩短,这个数字只会增加

我希望你们中遇到并解决了这个问题的一些人能帮助我-我将非常感激(知道有解决方案,我会感到欣慰…)

提前谢谢你的帮助——我说你会帮我保持理智,这不是开玩笑

另外,我们应该如何处理对现有代码的修复和更新?我的理解是,在1.2上修复某些东西并不能修复1.3和1.4上的错误-或者我弄错了吗?或者我应该在1.4上修复它吗?有没有一种方法可以让我很容易地将特定更改应用到较旧/较新的版本,这样我就不必多次进行相同的更改e时代

不,一个版本上的修复不会自动应用于所有其他版本。我假设您根据标记为版本1.2的提交创建了一个
错误修复
分支。在找到并修复错误后,您应该将修复合并到版本1.2中,并最终标记为版本1.2.1。在过程中的某个时刻,这些提交应该合并到其他版本中(如1.3、1.4等),根据需要解决冲突。然后发布1.3.1、1.4.1等版本,以及特定于这些版本的任何其他错误修复

为了解决更一般的问题,我认为将您的“引擎”作为一个单独的项目,并具有自己的发布周期是一种合理的策略。使用此引擎的每个项目都可以指定它在项目依赖关系管理系统中使用的版本(
requirements.txt
用于python,Maven或Ant用于Java,Thread或npm用于JavaScript)