Git学习系列(九)—— Git的版本控制的最佳实践

2024-08-30 00:32

本文主要是介绍Git学习系列(九)—— Git的版本控制的最佳实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:

http://www.ruanyifeng.com/blog/2012/07/git.html (阮一峰)

http://segmentfault.com/a/1190000000434973

http://nvie.com/posts/a-successful-git-branching-model/ (英文)


整理一下:


主要分支

中央仓库中有两个长期的分支:

  • master
  • develop

master用作生产分支,里面的代码是准备部署到生产环境的。

develop是可交付的开发代码,也可以看成是用于集成分支,每晚构建从develop获取代码。

develop分支中的代码足够稳定的时候,就将改动合并到master分支,同时打上一个标签,标签的名称为发布的版本号。

辅助分支

通过辅助分支来帮助并行开发,和主要分支不同,这些分支的生命周期是有限的:

  • 特性分支
  • 发布分支
  • 紧急修复分支

特性分支

特性分支可能从develop分支分出,最终必须合并回develop

特性分支(也叫主题分支)用于开发新特性。每个新特性开一个新分支,最终会合并回develop(当特性开发完毕的时候),或者放弃(如果最终决定不开发这个特性)。

特性分支只存在于开发者的仓库中。

创建一个特性分支

develop分支分出:

$ git checkout -b myfeature develop
合并回develop

完成的特性需要合并回develop

$ git checkout develop
$ git merge --no-ff myfeature
$ git branch -d myfeature
$ git push origin develop

使用--no-ff确保总是新生成一个提交,避免丢失曾经存在一个特性分支的历史信息,也能够方便地看出哪些提交属于同一个特性。比较:


发布分支

发布分支可能从develop分出,最终必须合并回1developmaster。发布分支以release-*的方式命名。

发布分支为新的发布版本作准备,包括一些小bug的修正和发布的元信息(版本号、发布日期等)的添加。这样develop分支就可以接受针对以后的发布的新特性。

在代码基本可以发布的时候从develop分支分出发布分支。这时要确保此次发布包括的特性都已经合并到develop分支了(同时,为下一版发布准备的特性不能合并到develop分支,必须等待发布分支分出后才能合并)。

创建发布分支
$ git checkout -b release-1.2 develop
$ ./bump-version.sh 1.2
$ git commit -a -m "Bumped version number to 1.2"

bump-version.sh是一个脚本,修改相应文件的信息,以体现版本号已经改变了。

完成发布分支

当发布分支中的代码可以发布的时候,将代码合并到master分支,并打上相应的标签。同时还需要合并到develop分支,因为发布分支里可能包含一些修正bug的代码,合并回去可以确保以后的版本也包含这些修正。

$ git checkout master
$ git merge --no-ff release-1.2
$ git tag -a 1.2$ git checkout develop
$ git merge --no-ff release-1.2

注意,合并回develop分支很可能导致合并冲突,我们需要手工修复一下,然后提交。之后可以删除发布分支:

$ git branch -d release-1.2

紧急修复分支

可能从master分出,必须合并回developmaster。分支名以hotfix-*开头。

紧急修复分支和发布分支很像,只不过它们是意料之外的。如果生产系统里有一个紧急的bug,必须马上修复的话,我们就从master里分出一个紧急修复分支。

这样,某个人修复紧急bug的同时,团队其他成员可以继续在develop分支上开发。

创建紧急修复分支
$ git checkout -b hotfix-1.2.1 master
$ ./bump-version.sh 1.2.1
$ git commit -a -m "Bumped version number to 1.2.1"

修复bug并提交

$ git commit -m "Fixed severe production problem"
完成紧急修复分支

修复bug之后,需要合并回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

以上情况假定不存在发布分支。假设存在发布分支的话,代码不应该合并回develop,而应该合并回发布分支,确保正在准备的发布分支也能收到这个补丁(由于发布分支最终会合并到develop,因此这时不用再另外合并到develop)。

最后,删除这个紧急修复分支:

$ git branch -d hotfix-1.2.1

这篇关于Git学习系列(九)—— Git的版本控制的最佳实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119285

相关文章

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;