使用GIT维护应用程序的不同变体
我目前正在为几个客户开发一个应用程序。代码库在两者中都有99%的通用性,因为它是一个发票应用程序,其原理是相同的。但是,每个“版本”都有一些次要的特殊需求,不容易通过设置(表单中的不同字段等)进行控制 我想用GIT管理主代码库,以及“特定于版本”的文件,这些文件最多是4-5个文件。我一直在阅读建议,我发现一个好的方法是拥有一个包含所有代码库的主分支和每个版本的特定分支,将主分支的常见更改合并到每个特定分支,并在每个分支中提交特定更改 这是一个好方法吗?我不知道如何从我现在拥有的东西中实现这一点:如果我现在进行分支,然后从主分支中删除特定于版本的文件,它不会将删除合并到特定分支吗使用GIT维护应用程序的不同变体,git,Git,我目前正在为几个客户开发一个应用程序。代码库在两者中都有99%的通用性,因为它是一个发票应用程序,其原理是相同的。但是,每个“版本”都有一些次要的特殊需求,不容易通过设置(表单中的不同字段等)进行控制 我想用GIT管理主代码库,以及“特定于版本”的文件,这些文件最多是4-5个文件。我一直在阅读建议,我发现一个好的方法是拥有一个包含所有代码库的主分支和每个版本的特定分支,将主分支的常见更改合并到每个特定分支,并在每个分支中提交特定更改 这是一个好方法吗?我不知道如何从我现在拥有的东西中实现这一点:
谢谢 我认为这在规模相对较小、部署数量有限、团队规模小、纪律严明、刷新和定制分支之间没有太多提交的情况下都能很好地工作 然而,我也看到这有一个曲棍球形状的复杂曲线,当你成长时,你可能会以很快的速度撞到墙上。如果您看到这种扩展,您必须及时查看某种形式的模块化/插件架构,以避免遇到这种情况
当您看到集成更改开始受到影响时(通常在拉取最新的主控时发生中断),这应该是您的危险信号。我认为这在规模相对较小、部署数量有限、团队规模较小、纪律严明、刷新和自定义分支之间没有太多提交的情况下运行良好 然而,我也看到这有一个曲棍球形状的复杂曲线,当你成长时,你可能会以很快的速度撞到墙上。如果您看到这种扩展,您必须及时查看某种形式的模块化/插件架构,以避免遇到这种情况 当您看到集成更改开始受到影响时(通常在拉取最新的主控时发生中断),这应该是您的危险信号。您可以使用一个分支作为公共代码,并将其合并到每个项目分支中,但这感觉像是一种非常奇怪的近似git
子模块或子树的方法。如果您有一个很好的子目录结构可以使用,我强烈建议您使用gitsubtree
子模块
在处理一个项目时,您经常需要使用其中的另一个项目。也许它是一个由第三方开发的库,或者您单独开发并在多个父项目中使用的库。在这些场景中会出现一个常见的问题:您希望能够将两个项目视为单独的,但仍然能够在另一个项目中使用其中一个项目
资料来源:
子树合并
[…]子树合并的思想是您有两个项目,其中一个项目映射到另一个项目的子目录,反之亦然。当您指定一个子树合并时,Git非常聪明,能够判断出其中一个是另一个的子树,并进行适当的合并——这非常令人惊讶
来源:您可以对公共代码使用一个分支,并将其合并到每个项目分支中,但这对于近似git子模块
或子树
来说是一种非常奇怪的方式。如果您有一个很好的子目录结构可以使用,我强烈建议您使用gitsubtree
子模块
在处理一个项目时,您经常需要使用其中的另一个项目。也许它是一个由第三方开发的库,或者您单独开发并在多个父项目中使用的库。在这些场景中会出现一个常见的问题:您希望能够将两个项目视为单独的,但仍然能够在另一个项目中使用其中一个项目
资料来源:
子树合并
[…]子树合并的思想是您有两个项目,其中一个项目映射到另一个项目的子目录,反之亦然。当您指定一个子树合并时,Git非常聪明,能够判断出其中一个是另一个的子树,并进行适当的合并——这非常令人惊讶
资料来源:+1。分支用于功能开发,使用它们进行配置管理可能会变得非常复杂。我曾经得到的建议是,我不想遵循,但最终不得不这样做:“不要创建一个您不想最终合并或放弃的分支”。+1。分支用于功能开发,使用它们进行配置管理可能会变得非常复杂。我曾经得到的建议是,我不想遵循,但最终不得不这样做:“不要创建一个您不想最终合并或放弃的分支”。