同一个项目,多个客户的git工作流程

6
在我第一个问题之后,我希望确认在我的情况下最佳的git工作流程。

我有一个单一的django项目,托管在github上,并且有不同的克隆版本,每个版本都有自己的分支:customerA,customerB,demo...(考虑网站)

这些分支共享相同的核心,但具有不同的数据和设置(这些被列入了gitignore)

当我在CustomerA分支上工作时,如何将一些错误更正复制到其他部署中?

当我创建新的通用功能时,我创建一个特殊的分支,然后将其合并到我的主分支中。 然后,为了部署到“客户端”,我将主分支合并到客户分支中。 这是正确的方法吗?还是应该进行变基(rebase)?

# from customerA branch
git fetch origin master
git merge origin master

此外,我为每个客户创建了一个远程分支,以便将客户的分支备份到Github上。

这似乎是一个经典问题,但我猜我没有正确地使用git。

谢谢。

Ju。

4个回答

3
我会在一个众所周知的地方拥有单个项目仓库,其中包含一个主分支和特定部署(例如 customer/A, customer/B demo)的分支。然后,针对每个客户、演示服务器等,我会从这些分支中检出副本。您可以使用单个项目仓库上的提交挂钩自动从各自的分支中拉取它们。
每个开发人员都将拥有其本地项目仓库副本,进行本地工作,然后将内容推回单个项目仓库。
挑战在于维护与主分支分离的分支并进行常规合并,以使分离不会随时间增长。
我曾经在网络上某个博客文章中看到更详细描述这个解决方案,但我无法快速找到它。如果我没记错的话,这是关于使用git进行暂存和生产Web服务器的一篇博客文章。

谢谢。这就是我实际操作的方式。在客户A的部署中,我会执行以下命令来更新主分支上的代码:git pull origin master git merge master这样做是正确的吗? - jujule
抱歉,实际上我是从客户A的分支进行以下操作: git fetch origin; git merge origin master; 这样做正确吗? - jujule

1
如果这三个网站共享一些“核心”代码(例如Django应用程序),则应将该核心代码分解为自己的存储库,并使用git子模块将其包含在其他项目中,而不是重复它。

谢谢。实际上我的客户共用同一个应用程序,但有些是定制的,因此我使用单个代码库。当我有一个定制的客户应用程序时,我会添加子模块。 - jujule

0
我会有一个名为project-master的仓库或类似的东西,以及每个客户的仓库。当你需要让代码在这些客户端仓库中可用时,可以从project-master拉取到该仓库中。

你是说将客户按存储库分开比按分支更好吗?为什么这样做? - Joshua Partogi
如果客户是通过仓库进行分离的,你可以使用Git来来回推送,而不是来回移动分支。听起来你想要有选择地将功能移动到特定的客户端,这可能是最有效的方式。或者,你也可以在每个项目上有不同的设置文件,并根据需要启用/禁用不同的应用功能。但这就需要你相应地编写应用程序。 - Adam Nelson
但是如果我有一个修复所有客户端的错误修复呢?我将不得不手动更新所有存储库以集成bugfix。 - dieter
你需要为该场景编写一个“合并到多个仓库”的脚本命令。 - Adam Nelson

0

不要将项目分开放在不同的分支中,而是将它们分成不同的存储库。

使“通用”代码足够通用,以便costumerA的通用代码副本与costumerB的通用代码副本完全相同。

然后,您就不必拉取或合并任何内容。当您更新通用代码时,costumerA和costumerB都会自动获得更新(因为他们使用相同的通用代码)。

通过“通用”代码:我指的是驱动您正在开发的网站的包/应用程序系列。

我假设costumerA和costumerB存储库只包括特定于站点的设置和模板之类的内容。

关键在于使“通用”代码通用:不要让costumerA使用“稍微修改过的版本”的“通用”代码。

此外,我建议使用不依赖于git的部署机制。git是一个很好的源代码管理工具;但是它不是设计用来作为部署工具的(据我所知)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接