当每个分支只有一个(或几个)提交不同时,我如何有效地管理 3 个并行分支?

How do I manage 3 parallel branches efficiently when each are different by only a single (or few) commit(s)?

我正在将 git(通过 Bitbucket/SourceTree/PHPStorm/cPanel)合并到我的 Web 开发工作流程中,并且我正在尝试找到管理我的开发环境的最有效方法。我目前在我的 git 存储库中有 3 个分支,每个分支代表我开发工作流程中每个发布阶段的单独 VPS 部署(本地 VPS 用于个人开发,远程开发 VPS用于登台和客户端预览,以及实时网站的远程制作 VPS)。

为了让这些发行版中的每一个都能正常工作,每个发行版都需要自己的自定义 .cpanel.yml 文件(用于自动部署),这意味着我已经使用自定义文件向每个分支提交了唯一的提交,但其余的提交基本上完全相同。

我试过从存储库中排除 .cpanel.yml 文件,但 cPanel 要求将此 .cpanel.yml 文件签入存储库以便自动分发到 运行适当地。 (最初我想在这个文件上包含 3 个变体,并使用 git 钩子解压相应的文件,但 cPanel 无法识别任何未签入回购的 .cpanel.yml 文件,所以这是没用。我也找不到任何关于覆盖默认值的文档。cpanel.yml 文件名)

在这种特殊情况下,我有 3 个仅在少量提交中有所不同的并行分支,使用什么方法最好?我发现 SourceTree 中的 cherry pick 功能在我的 mac 上使用起来并不容易,我更喜欢一种简单的方法来维护这三个分支之间的共同提交。我也愿意接受一种解决方案,该解决方案涉及将三个独特的提交合并为一个解决方案(例如能够覆盖默认的 .cpanel.yml 文件名并提交其中的 3 个文件并将 cpanel 指向正确的文件)

您可以提交到公共分支,例如 master,然后在此基础上重新设置您的分支。添加所有人通用的文件时

让自己成为一个脚本,它首先提交到一个公共 master,然后变基或合并到您部署的 3 个分支中的一个。

原来我找到了一个非常优雅的解决这个问题的方法,使用简单的 shell 脚本很容易实现:

#!/bin/bash
cd /path/to/git/repository/ || exit;
git checkout -f "secondbranch";
git stash; git stash clear;
git merge --no-commit --no-ff "firstbranch";
git reset -- .cpanel.yml;git checkout -- .cpanel.yml;
git reset -- classes/config.php;git checkout -- classes/config.php;
git reset -- deploy.sh;git checkout -- deploy.sh;
bash .git/hooks/pre-commit;

在此示例 shell 脚本中,我的存储库中的 3 个分支中的每一个都有 3 个不同的文件:.cpanel.ymlclasses/config.phpdeploy.sh .从一个分支合并到另一个分支后,我为被合并到的分支恢复了原来的 3 个文件,从这里我可以解决任何合并冲突并最终成功合并。

我已经在我管理的几十个存储库中使用这个脚本 9 个多月了,它的效果非常好!