目前,我们有四个不同的IT环境:dev用于开发者,test用于测试人员测试代码。UAT是一个类似于生产环境的环境,供某些最终用户在进入生产之前使用产品。Production为生产环境。
因此,我在网上阅读了一些关于Git源代码控制的文章,但看起来Git只有开发分支(供开发人员使用)和主分支(用于生产环境),特性分支用于添加功能,发布分支供测试人员测试。
因此,我想知道是否需要单独拥有UAT和测试分支?这样最终用户和测试人员就可以分别测试代码。如果需要,如何在Git中设置这两个分支?
Git分支完全独立于多个代码环境的概念,不必一一映射。 Git本身应该限制在develop
,feature
,bugfix
,hotfix
,release
和master
上。这在Git Flow中有所说明:
develop
分配到开发环境,release
分配到测试环境,master
分配到生产环境。但是,请注意这不是必需的部署策略。如果您有其他环境,例如 UAT,您最终只需要测试最终用户将看到的内容。最新 release
中的代码应该与 master
相同,所以无论您将这两个哪个部署到 UAT 环境都没关系;这取决于个人喜好。个人而言,我会选择 release
,因为 master
通常被认为是“最后一个已知良好点”。您的最终用户可能会发现一些您自己的测试人员没有发现的错误!
话虽如此,值得注意的是,在 DevOps 圈子里有一个当前的推动"向左转"(shift left),其中整个测试周期发生在 feature
分支本身上,develop
被认为是“可交付代码”。 在这种情况下,develop
可以直接通过到生产环境,因此(理论上),所有环境都将指向 develop。 然而,我仍然建议个人遵循 Git Flow。
// get everything of a working version into git
git add some_file.txt
git commit -m "initial commit"
git branch release
git branch testing
git branch UAT
git branch whatever_name_you_want
之后所有的分支都将处于同一版本。此时您所做的更改只会影响一个分支。若想将更改应用到其他分支,请切换并合并。(请记得切换回第一个分支,如果您不打算在发布/测试分支上进行额外更改)。
git checkout release
// I usually use master as the main dev branch but the name doesn't matter
git merge master
// remember to checkout back if you want to keep writing changes to your dev branch
git checkout master