GIT正确的分支结构工作流程

时间:2017-04-05 11:46:22

标签: git bash github version-control

我开始在特定的工作流程后实现GIT存储库。 工作流程如下:

                                v0.1               v0.2 
                                 /                  / 
 releases-------------------------------------------------
/                               |                   |
main--------------------------[0.1]---------------[0.2]                   
\                            /    \               /
 development---             /      \             /
               \           /        \           /
                feature-ABC          feature-XYZ
  1. main包含最新的稳定代码,其中任何开发人员都可以git checkout -> build -> deploy
  2. main包含标记,用于标识release
  3. 每个发布版本都分为release分支
  4. development是开发人员的起始分支。在commit构建服务器构建/部署解决方案到development environment
  5. 之后
  6. 如果开发人员需要处理故事/功能,他们会从development分支,并在使用development的分支命名完成时推回feature/namehotfix/bugname
  7. development变得稳定后,它会合并回main并且版本标记并部署in staging
  8. release
  9. 中创建发布版本

    问题

    现在,为了采用这个工作流程,我创建了一个开发人员应该执行的GIT commands序列。你能验证一下它的正确性吗?

    此外,如何确保主要和开发始终正确同步?

    第一次(假设还没有开发分支)

    $ git checkout master
    $ git branch -b development
    $ git push -u origin development
    

    开始开发

    $ git checkout development
    $ git branch -b feature/my_feature
    
    ... iteration ...
     $ git add ...
     $ git commit -m "My Comment"
     $ git push origin feature/my_feature
    ... iteration ...
    

    开发人员已完成功能/错误

    $ git checkout development
    $ git merge feature/my_feature
    ... resolve conflicts ...
    $ git commit -m "Merge from feature/my_feature"
    $ git push -u origin development
    

    Tester批准最新的开发版本

    $ git checkout master
    $ git merge development
    ... resolve conflicts ...
    $ git tag -a v0.1 -m "my version 0.1"
    $ git commit -m "Merge from development"
    $ git push -u origin master --tags
    
    $ git checkout master
    $ git branch v0.1
    $ git commit -m "my version 0.1"
    $ git push -u origin v0.1
    

2 个答案:

答案 0 :(得分:1)

我不知道我们可以100%确定地说这些命令对于所有情况都是“正确的”,认识到图中的事件是好的和线性的,但发展现实可能不是。

尽管如此,在我看来,跳出来的唯一问题是:

>>> x = 10
>>> def foo():
...     print(x)
...     x += 1
>>> foo()
Traceback (most recent call last):
...
UnboundLocalError: local variable 'x' referenced before assignment

提交将失败,因为它不包含任何更改。虽然我怀疑需要$ git checkout master $ git branch v0.1 $ git commit -m "my version 0.1" $ git push -u origin v0.1 语句(带注释的标签可能对你要做的事情更有意义),如果你必须有一个提交,那么你将不得不通过{{1说服git创建一个的参数。

答案 1 :(得分:1)

这些命令可以满足您计划使用的工作流程。但是你可以参考一些小东西(它也可以保持原样):

1. git push -u只需要第一次推送(设置为上游)。

2.发布版本始终存在于release分支中。因此,您可以将main分支合并到release分支,而不是创建分支v0.1v0.2等。

要检查maindevelopment是否同步,您可以使用git log main..development。如果它有输出,则意味着development分支有提交需要合并到main分支。