Git 测试环境分支
Git branching on test environment
我开始在一家新使用 git 的公司工作。我需要一个好的推荐。首先,我想谈谈目前的工作流程。
该团队的工作流程与常规 git 基础有很大不同。
分行是
Local (feature/hotfix branch from Dev) -> Dev -> Test -> Prod
环境
Dev -> Test -> Prod
- 每个分支都有不同的配置文件(目前还没有解决方案。但我会先解决这个问题)因此,我们无法合并分支。
- 开发者在Local(feature/hotfix分支)上工作,将他们的推送合并到Dev分支中,并在Dev环境上发布他们的版本(只是补丁版本在增加(1.0.xxx),我知道这样做不是件好事。)
- 然后他们将更改挑选到测试分支中。并且,他们在测试环境中发布了一个新版本。 UAT在这里很开心
- 当开发人员想要将他们的更改发布到生产环境中时,他们也会挑选他们的更改。并在 prod 环境上发布新版本。
这里的第一个问题,我们不能很好地观察分支的历史,因为由于配置文件我们无法合并分支。
第二个问题是一些更改应该在测试环境中停留 1-2 两周,更改的生命周期可以长也可以短。
第三个问题,我们无法使用git 合并和拉取请求等功能。我们想用 PR 来做 code review 等等。这对我们很重要。
我可以说部署过程和版本控制系统在这个场景中是混合的。因此,我们想使用类似 git-flow 的东西。虽然,我们想保留这三个环境(开发、测试和生产),主要目标是合并分支并使用拉取请求
比方说,我们只有 develop 和 master 分支。开发人员在功能分支上工作。并将它们的功能合并到 develop.Next,我们为测试环境创建了一个发布分支。但是我们应该为不同的生命周期变更集做些什么呢?
我们应该如何将release分支合并到master分支?我们应该如何处理 git 分支上的测试环境?
例如;
release 1.3.0
- 有一个功能应该在测试环境中停留 2 周,然后应该进入生产环境
release 1.4.0
- 有人添加了一个新功能,应该在几天内用于生产环境。 (虽然 release 1.3.0
还活着。)
因此,测试环境将具有这两个功能,几天后产品应该具有最新的功能。但是 release 1.4.0
分支具有这两个功能。我应该将什么合并到生产分支?
我们应该使用不同于 git-flow 的东西吗?你有什么建议?
这是很多不同的问题。我会尽量回答我认为最重要的那个。
您现有的工作流程听起来受到了 subversion 之类的启发,在 subversion 中通常通过挑选来避免合并。在git中首选肯定是合并。
您给出的不合并分支的主要原因是您希望保持配置文件不同。但这并不是你想的那么大的问题。
假设您在 Dev
中有一个配置文件 config.json
,在 Test
中有一个内容不同的配置文件。
你可以做到
# register a merge driver named 'ours' that uses the command 'true' to always return 0
git config --global merge.ours.driver true
git checkout Dev
echo 'config.json merge=ours' >> .gitattributes
git add .gitattributes
git commit -m 'Preserve config.json during merges'
git checkout Test
# copy the same commit, since we want the same setting in all branches
git cherry-pick Dev
# now, when you merge, config.json will be ignored
git merge Dev
因此,这应该可以合并分支,这应该可以解决您的第一个和第二个问题。向其中添加 PR 也应该可以解决您的第三个问题。
我开始在一家新使用 git 的公司工作。我需要一个好的推荐。首先,我想谈谈目前的工作流程。
该团队的工作流程与常规 git 基础有很大不同。 分行是
Local (feature/hotfix branch from Dev) -> Dev -> Test -> Prod
环境
Dev -> Test -> Prod
- 每个分支都有不同的配置文件(目前还没有解决方案。但我会先解决这个问题)因此,我们无法合并分支。
- 开发者在Local(feature/hotfix分支)上工作,将他们的推送合并到Dev分支中,并在Dev环境上发布他们的版本(只是补丁版本在增加(1.0.xxx),我知道这样做不是件好事。)
- 然后他们将更改挑选到测试分支中。并且,他们在测试环境中发布了一个新版本。 UAT在这里很开心
- 当开发人员想要将他们的更改发布到生产环境中时,他们也会挑选他们的更改。并在 prod 环境上发布新版本。
这里的第一个问题,我们不能很好地观察分支的历史,因为由于配置文件我们无法合并分支。
第二个问题是一些更改应该在测试环境中停留 1-2 两周,更改的生命周期可以长也可以短。
第三个问题,我们无法使用git 合并和拉取请求等功能。我们想用 PR 来做 code review 等等。这对我们很重要。
我可以说部署过程和版本控制系统在这个场景中是混合的。因此,我们想使用类似 git-flow 的东西。虽然,我们想保留这三个环境(开发、测试和生产),主要目标是合并分支并使用拉取请求
比方说,我们只有 develop 和 master 分支。开发人员在功能分支上工作。并将它们的功能合并到 develop.Next,我们为测试环境创建了一个发布分支。但是我们应该为不同的生命周期变更集做些什么呢?
我们应该如何将release分支合并到master分支?我们应该如何处理 git 分支上的测试环境?
例如;
release 1.3.0
- 有一个功能应该在测试环境中停留 2 周,然后应该进入生产环境
release 1.4.0
- 有人添加了一个新功能,应该在几天内用于生产环境。 (虽然 release 1.3.0
还活着。)
因此,测试环境将具有这两个功能,几天后产品应该具有最新的功能。但是 release 1.4.0
分支具有这两个功能。我应该将什么合并到生产分支?
我们应该使用不同于 git-flow 的东西吗?你有什么建议?
这是很多不同的问题。我会尽量回答我认为最重要的那个。
您现有的工作流程听起来受到了 subversion 之类的启发,在 subversion 中通常通过挑选来避免合并。在git中首选肯定是合并。
您给出的不合并分支的主要原因是您希望保持配置文件不同。但这并不是你想的那么大的问题。
假设您在 Dev
中有一个配置文件 config.json
,在 Test
中有一个内容不同的配置文件。
你可以做到
# register a merge driver named 'ours' that uses the command 'true' to always return 0
git config --global merge.ours.driver true
git checkout Dev
echo 'config.json merge=ours' >> .gitattributes
git add .gitattributes
git commit -m 'Preserve config.json during merges'
git checkout Test
# copy the same commit, since we want the same setting in all branches
git cherry-pick Dev
# now, when you merge, config.json will be ignored
git merge Dev
因此,这应该可以合并分支,这应该可以解决您的第一个和第二个问题。向其中添加 PR 也应该可以解决您的第三个问题。