`
flynewton
  • 浏览: 62512 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

GIT分支管理是一门艺术

阅读更多

关键字: GIT , 分支管理

转自:Linux大鹏博客 http://roclinux.cn/?p=2129

1. 

GIT,在技术层面上,绝对是一个无中心的分布式版本控制系统,但在管理层面上,我建议你保持一个中心版本库。

 

2. 

我建议,一个中心版本库(我们叫它origin)至少包括两个分支,即“主分支(master)”和“开发分支(develop)”

 

 

3. 

要确保:团队成员从主分支(master)获得的都是处于可发布状态的代码,而从开发分支(develop)应该总能够获得最新开发进展的代码。

 

4. 

在一个团队开发协作中,我建议,要有“辅助分支”的概念。

 

5. 

“辅助分支”,大体包括如下几类:“管理功能开发”的分支、“帮助构建可发布代码”的分支、“可以便捷的修复发布版本关键BUG”的分支,等等

 

6. 

“辅助分支”的最大特点就是“生命周期十分有限”,完成使命后即可被清除。

 

7. 

我建议至少还应设置三类“辅助分支”,我们称之为“Feature branches”,“Release branches”,“Hotfix branches”。

 

 

至此,我们形成了如下这张最重要的组织组,包含了两个粗体字分支(master/develop)和三个细体字分支(feature/release/hotfixes)。

8. 

“Feature branches”,起源于develop分支,最终也会归于develop分支。

 

9. 

“Feature branches”常用于开发一个独立的新功能,且其最终的结局必然只有两个,其一是合并入“develop”分支,其二是被抛弃。最典型的“Fearture branches”一定是存在于团队开发者那里,而不应该是“中心版本库”中。

 

10. 

“Feature branches”起源于“develop”分支,实现方法是:

 

git checkout -b myfeature develop

11. 

“Feature branches”最终也归于“develop”分支,实现方式是:

 

git checkout devleop
git merge --no-ff myfeature
(--no-ff,即not fast forward,其作用是:要求git merge即使在fast forward条件下也要产生一个新的merge commit)
(此处,要求采用--no-ff的方式进行分支合并,其目的在于,希望保持原有“Feature branches”整个提交链的完整性)
git branch -d myfeature
git push origin develop

12. 

“Release branch”,起源于develop分支,最终归于“develop”或“master”分支。这类分支建议命名为“release-*”

 

13. 

“Relase branch”通常负责“短期的发布前准备工作”、“小bug的修复工作”、“版本号等元信息的准备工作”。与此同时,“develop”分支又可以承接下一个新功能的开发工作了。

 

14. 

“Release branch”产生新提交的最好时机是“develop”分支已经基本到达预期的状态,至少希望新功能已经完全从“Feature branches”合并到“develop”分支了。

 

15. 

创建“Release branches”,方法是:

 

git checkout -b release-1.2 develop
./bump-version.sh 1.2 (这个脚本用于将代码所有涉及版本信息的地方都统一修改到1.2,另外,需要用户根据自己的项目去编写适合的bump-version.sh)
git commit -a -m "Bumped version number to 1.2"

16. 

在一段短时间内,在“Release branches”上,我们可以继续修复bug。在此阶段,严禁新功能的并入,新功能应该是被合并到“develop”分支的。

 

17. 

经过若干bug修复后,“Release branches”上的代码已经达到可发布状态,此时,需要完成三个动作:第一是将“Release branches”合并到“master”分支,第二是一定要为master上的这个新提交打TAG(记录里程碑),第三是要将“Release branches”合并回“develop”分支。

 

git checkout master
git merge --no-ff release-1.2
git tag -a 1.2 (使用-u/-s/-a参数会创建tag对象,而非软tag)
git checkout develop
git merge --no-ff release-1.2
git branch -d release-1.2

18. 

“Hotfix branches”源于“master”,归于“develop”或“master”,通常命名为“hotfix-*”

 

19. 

“Hotfix branches”类似于“Release branch”,但产生此分支总是非预期的关键BUG。

 

20. 

建议设立“Hotfix branches”的原因是:希望避免“develop分支”新功能的开发必须为BUG修复让路的情况。

 

21. 

建立“Hotfix branches”,方法是:

 

git checkout -b hotfix-1.2.1 master
./bump-version.sh 1.2.1
git commit -a -m "Bumpt version to 1.2.1" (然后可以开始问题修复工作)
git commit -m "Fixed severe production problem" (在问题修复后,进行第二次提交)

22. 

BUG修复后,需要将“Hotfix branches”合并回“master”分支,同时也需要合并回“develop”分支,方法是:

 

git checkout master
git merge --no-ff hotfix-1.2.1
git tag -a 1.2.1
git checkout develop
git merge --no-ff hotfix-1.2.1
git branch -d hotfix-1.2.1

分享到:
评论

相关推荐

    修改代码的艺术.ppt

    《修改代码的艺术》是针对软件开发人员的一份珍贵资源,主要探讨了如何高效、优雅地对已有代码进行修改,以提升软件质量、可维护性和...通过深入学习和实践,开发者可以更好地驾驭代码,让软件开发成为一门真正的艺术。

    程序设计经验杂谈,程序设计,经验杂谈

    掌握Git的基本操作,如提交、分支管理和合并,是每个程序员必备的技能。 代码规范是保持代码一致性、可读性和可维护性的关键。遵循一定的命名规则、注释标准和代码结构,可以使代码更容易被他人理解和修改。例如,...

    任务清单及工作量估算

    总的来说,任务清单及工作量估算是一门科学也是一门艺术,需要综合项目管理知识、技术理解以及团队协作。通过持续学习和实践,我们可以不断提升这方面的能力,从而更有效地管理IT项目。在提供的压缩文件"任务清单及...

    给程序员的话《编程新手真言》(PDF)

    Git是现代软件开发中的必备工具,用于版本管理和协作。学习如何创建分支、提交更改、合并代码以及解决冲突,是每个程序员的基本功。 5. 开发环境与调试技巧: 设置合适的开发环境,如IDE(集成开发环境)或文本...

    软件工程中的软件工程实践与经验积累.pptx

    通过以上内容,我们可以看到软件工程不仅是一门技术学科,更是一种管理艺术。从需求分析到最终的产品发布,每一个环节都需要精心规划和执行。随着技术的发展,软件工程师们还需要不断学习新的工具和技术,以适应快速...

    JAVA手机游戏(堡垒)的设计与开发(源代码+论文)【毕业论文】.zip

    开发者需要了解如何使用Git进行代码提交、分支管理和合并。 10. **论文撰写**:毕业论文部分需要对整个开发过程进行总结,包括需求分析、设计思路、实现技术、遇到的问题及解决方案,以及项目的意义和价值。这不仅...

    程序设计经验杂谈

    熟悉Git的工作流,如分支管理和合并策略,能够大大提高开发效率。 程序设计过程中,错误处理和调试同样重要。有效的异常处理机制可以防止程序因未预期的输入或条件而崩溃。学会使用调试工具,如IDE中的断点、单步...

    Art_Gallery_Animation_2019:与Victoria Schimansky共同完成2019年秋季计算几何的美术馆动画最终项目

    计算几何是一门计算机科学的分支,它研究如何用算法处理几何问题。在这个项目中,计算几何可能被用来生成和操作二维或三维的艺术图形,包括但不限于绘制、变换、碰撞检测、最优化路径规划等。计算几何的应用通常涉及...

    iOS_代码库

    在Git版本控制系统中,“main”是默认的主分支名,这里可能包含了所有代码、资源文件、配置文件等项目的核心组成部分。开发者可以通过解压这个文件来查看和学习代码库的具体实现。 总的来说,这个代码库为学习iOS...

    modSteamPunkAge

    "modSteamPunkAge-master"这个文件名表明这是一个项目的主分支,通常在版本控制系统如Git中,master分支代表项目的主线开发。这暗示着我们可以在这里找到项目的源代码、资源文件和构建脚本,从而深入了解开发者如何...

    vampire:个人资料库。 这么多流血的边缘,你敢打赌吸血鬼

    在Linux世界中,软件的管理和更新是一门深奥的艺术。每一个注重技术细节的用户都希望自己的工具箱中充满最新、最前沿的软件,以应对各种技术挑战。然而,在官方的发行版仓库中,往往只能找到经过充分测试和验证的...

    retrorace:用Java开发的复古种族竞赛

    "master"分支是Git版本控制系统中的默认分支,通常包含最新的稳定代码。在解压后,我们可以期待找到项目的主要结构,如源代码文件(.java)、资源文件(如图像、音频和配置文件)、构建脚本(如gradle或maven)、...

    流星之夜:充满8位星的宁静天空

    - "meteor-night-master"可能表示的是该项目的主分支或最终版本,这通常与Git等版本控制系统有关,用于跟踪代码的修改历史和协作开发。 综上所述,"流星之夜:充满8位星的宁静天空"是一个集编程、艺术、游戏设计于...

    Enlight-Android:用于控制 Maquina Fountain 的 Android 应用程序项目

    在Android应用开发中,通常会使用版本控制系统如Git来管理代码,master分支代表了项目的主线开发。打开这个压缩包,我们可以期待找到项目的源代码文件夹、资源文件、配置文件等,这些都是构建Android应用必不可少的...

    歌剧节目

    在Git版本控制系统中,master分支通常是项目开发的主线,团队成员可以在这个分支上进行协作,每个人的更改都能得到记录和管理,这样既保证了项目的稳定发展,也为团队协作提供了便利。 综上所述,"歌剧节目"项目不...

    targilim-course:输入课程代码

    塔吉林课程将教授如何使用Git进行代码版本管理,理解分支、合并、提交等概念,以便于团队协作。同时,还会介绍GitHub或GitLab等平台的使用,使学员能够适应开源社区的开发模式。 五、调试与测试 编写代码的过程中,...

    Hobovis:来自 Soundcloud 的基于 Javascript 的音乐可视化工具

    在压缩包文件名称列表中,我们看到 "Hobovis-master",这通常表示这是一个Git仓库的主分支,包含Hobovis项目的源代码和其他相关资源。开发者可以通过解压这个文件,查看和学习Hobovis的实现细节,包括HTML、CSS和...

    SEProject:学期项目 - 开发游戏

    这个文件名“SEProject-master”暗示了这是一个项目仓库的主分支,通常在版本控制系统如Git中使用。在解压后,我们可能会找到以下结构: 1. `src`:源代码目录,包含Java源文件和可能的游戏逻辑、界面、资源加载等...

    dms316-gametech:布法罗大学,2014 年秋季 - DMS 316 GAME TECH

    这个课程可能涵盖了游戏开发的各个方面,包括但不限于编程、设计、艺术、音效和项目管理。 【描述】提供的信息有限,但可以推测"DMS 316 GAME TECH"是一门深入探讨游戏行业的课程,可能包括游戏引擎使用、交互设计...

    portfolio-website

    【压缩包子文件的文件名称列表】"portfolio-website-master" 表明这是一个 Git 仓库的主分支,通常包含项目的所有源代码和资源文件。我们可以期待在解压后找到以下文件和目录: 1. `index.html`:主页面文件,包含...

Global site tag (gtag.js) - Google Analytics