zoukankan      html  css  js  c++  java
  • [转]Git branching and tagging best practices

    Git branching and tagging best practices

    I am currently learning to use Git by reading Pro Git. Right now I'm learning about branching and tags. My question is when should I use a branch and when should I use a tag?

    For example, say I create a branch for version 1.1 of a project. When I finish and release this version, should I leave the branch to mark the release version? Or should I add a tag? If I add a tag, should I delete the version branch (assuming that it is merged into master or some other branch)?

    In short: Best practice is branch out, merge often and keep always in sync.

    There are pretty clear conventions about keeping your code in a separate branches from master branch:

    1. You are about to make an implementation of major or disruptive change
    2. You are about to make some changes that might not be used
    3. You want to experiment on something that you are not sure it will work
    4. When you are told to branch out, others might have something they need to do in master

    Rule of thumb is after branching out, you should keep in sync with the master branch. Because eventually you need to merge it back to master. In order to avoid a huge complicated mess of conflicts when merging back, you should commit often, merge often.

    Good practices to follow

    A successful Git branching model by Vincent Driessen has good suggestions. If this branching model appeals to you consider the flow extension to git. Others have commented about flow.

    Tagging practices

    As you already know, Git gives you commit identifiers like 1.0-2-g1ab3183 but those are not tags! Tagging is done with git tag, and the tags that are created using git tag are the base for the commit identifiers git describe creates. In another words, in Git you don't tag branches. You are tagging commits. It is correct to say that tag is just an annotated pointer to a commit.

    Lets look at practical example that demonstrated it,

                            /-- [v1.0]
                           v
    ---.---.---.---S---.---A     <-- master
                              
                               -.---B     <-- test
    

    Let's commit 'S' be commit pointed by tag 'v1.0'. This commit is both on branch 'master' and on branch 'test'. If you run "git describe" on top of commit 'A' (top of 'master' branch) you would get something like v1.0-2-g9c116e9. If you run "git describe" on top of commit 'A' ( aka the 'test' branch) you would get something like v1.0-2-g3f55e41 , that is the case with default git-describe configuration. Note that this result is slightly different. v1.0-2-g9c116e9 means that we are at commit with sortened SHA-1 id of 9c116e9, 2 commits after tag v1.0. There is no tag v1.0-2!

    If you want your tag to appear only on branch 'master', you can create new commit (e.g. only update default / fallback version information in GIT-VERSION-FILE) after branching point of 'test' branch. If you tag commits on 'test' branch with e.g. 'v1.0.3` it would be visible only from 'test'.

    References

    I have found many, many, useful blogs and posts to learn from. However, the ones that are professionally illustrated are rare ones. Thus, I would like to recommend a post - A successful Git branching model by @nvie. I have borrowed his illustration :)

    enter image description here

    • 2
      1.0-2-g1ab3183 is an identifier constructed by git describe from information available from git, but calling it a git identifier is a little too much. Git identifies by SHA hash; tags and branches are human constructs that git helpfully keeps track of. As such, make a tag when you think some human will one day wish to find a convenient bookmark to a commit. – mabraham Apr 21 '14 at 23:52
  • 相关阅读:
    poj 1182:食物链(种类并查集,食物链问题)
    hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)
    南阳理工 题目9:posters(离散化+线段树)
    poj 1195:Mobile phones(二维树状数组,矩阵求和)
    poj 3984:迷宫问题(广搜,入门题)
    poj 3278:Catch That Cow(简单一维广搜)
    《重构与模式》简化(策略模式)-积木系列
    builder模式-积木系列
    spring事务管理-Spring 源码系列(6)
    思考如何阅读
  • 原文地址:https://www.cnblogs.com/oxspirt/p/9406569.html
Copyright © 2011-2022 走看看