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
相关推荐
《修改代码的艺术》是针对软件开发人员的一份珍贵资源,主要探讨了如何高效、优雅地对已有代码进行修改,以提升软件质量、可维护性和...通过深入学习和实践,开发者可以更好地驾驭代码,让软件开发成为一门真正的艺术。
掌握Git的基本操作,如提交、分支管理和合并,是每个程序员必备的技能。 代码规范是保持代码一致性、可读性和可维护性的关键。遵循一定的命名规则、注释标准和代码结构,可以使代码更容易被他人理解和修改。例如,...
总的来说,任务清单及工作量估算是一门科学也是一门艺术,需要综合项目管理知识、技术理解以及团队协作。通过持续学习和实践,我们可以不断提升这方面的能力,从而更有效地管理IT项目。在提供的压缩文件"任务清单及...
Git是现代软件开发中的必备工具,用于版本管理和协作。学习如何创建分支、提交更改、合并代码以及解决冲突,是每个程序员的基本功。 5. 开发环境与调试技巧: 设置合适的开发环境,如IDE(集成开发环境)或文本...
通过以上内容,我们可以看到软件工程不仅是一门技术学科,更是一种管理艺术。从需求分析到最终的产品发布,每一个环节都需要精心规划和执行。随着技术的发展,软件工程师们还需要不断学习新的工具和技术,以适应快速...
开发者需要了解如何使用Git进行代码提交、分支管理和合并。 10. **论文撰写**:毕业论文部分需要对整个开发过程进行总结,包括需求分析、设计思路、实现技术、遇到的问题及解决方案,以及项目的意义和价值。这不仅...
熟悉Git的工作流,如分支管理和合并策略,能够大大提高开发效率。 程序设计过程中,错误处理和调试同样重要。有效的异常处理机制可以防止程序因未预期的输入或条件而崩溃。学会使用调试工具,如IDE中的断点、单步...
计算几何是一门计算机科学的分支,它研究如何用算法处理几何问题。在这个项目中,计算几何可能被用来生成和操作二维或三维的艺术图形,包括但不限于绘制、变换、碰撞检测、最优化路径规划等。计算几何的应用通常涉及...
在Git版本控制系统中,“main”是默认的主分支名,这里可能包含了所有代码、资源文件、配置文件等项目的核心组成部分。开发者可以通过解压这个文件来查看和学习代码库的具体实现。 总的来说,这个代码库为学习iOS...
"modSteamPunkAge-master"这个文件名表明这是一个项目的主分支,通常在版本控制系统如Git中,master分支代表项目的主线开发。这暗示着我们可以在这里找到项目的源代码、资源文件和构建脚本,从而深入了解开发者如何...
在Linux世界中,软件的管理和更新是一门深奥的艺术。每一个注重技术细节的用户都希望自己的工具箱中充满最新、最前沿的软件,以应对各种技术挑战。然而,在官方的发行版仓库中,往往只能找到经过充分测试和验证的...
"master"分支是Git版本控制系统中的默认分支,通常包含最新的稳定代码。在解压后,我们可以期待找到项目的主要结构,如源代码文件(.java)、资源文件(如图像、音频和配置文件)、构建脚本(如gradle或maven)、...
- "meteor-night-master"可能表示的是该项目的主分支或最终版本,这通常与Git等版本控制系统有关,用于跟踪代码的修改历史和协作开发。 综上所述,"流星之夜:充满8位星的宁静天空"是一个集编程、艺术、游戏设计于...
在Android应用开发中,通常会使用版本控制系统如Git来管理代码,master分支代表了项目的主线开发。打开这个压缩包,我们可以期待找到项目的源代码文件夹、资源文件、配置文件等,这些都是构建Android应用必不可少的...
在Git版本控制系统中,master分支通常是项目开发的主线,团队成员可以在这个分支上进行协作,每个人的更改都能得到记录和管理,这样既保证了项目的稳定发展,也为团队协作提供了便利。 综上所述,"歌剧节目"项目不...
塔吉林课程将教授如何使用Git进行代码版本管理,理解分支、合并、提交等概念,以便于团队协作。同时,还会介绍GitHub或GitLab等平台的使用,使学员能够适应开源社区的开发模式。 五、调试与测试 编写代码的过程中,...
在压缩包文件名称列表中,我们看到 "Hobovis-master",这通常表示这是一个Git仓库的主分支,包含Hobovis项目的源代码和其他相关资源。开发者可以通过解压这个文件,查看和学习Hobovis的实现细节,包括HTML、CSS和...
这个文件名“SEProject-master”暗示了这是一个项目仓库的主分支,通常在版本控制系统如Git中使用。在解压后,我们可能会找到以下结构: 1. `src`:源代码目录,包含Java源文件和可能的游戏逻辑、界面、资源加载等...
这个课程可能涵盖了游戏开发的各个方面,包括但不限于编程、设计、艺术、音效和项目管理。 【描述】提供的信息有限,但可以推测"DMS 316 GAME TECH"是一门深入探讨游戏行业的课程,可能包括游戏引擎使用、交互设计...
【压缩包子文件的文件名称列表】"portfolio-website-master" 表明这是一个 Git 仓库的主分支,通常包含项目的所有源代码和资源文件。我们可以期待在解压后找到以下文件和目录: 1. `index.html`:主页面文件,包含...