git使用规范
一、规范声明
为什么要使用版本控制软件?
版本控制软件提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理活动,追踪多个版本的开发和维护活动,及时发布软件。
虽然市场上有几十种不同的版本控制系统,一些世界上最著名的项目(例如 Linux 内核, Ruby on Rails,或是jQuery)都选择了使用 Git 作为它们的版本控制系统。为什么它们都选择 Git 呢??
1 节省时间
Git 运行快速。尽管我们在这里讨论的只是运行一个命令所需要的几秒钟,但是把它累积在你的日常工作中就是一个不小的飞跃了。它可以节省那些不必要的等待时间,并且去完成其它一些有意义的工作。
2 离线工作
当你不能联机远程中央仓库时你该怎么工作呢?对于一个像 Subversion 或者 CVS 的集中式版本控制系统来说,如果你没有连接到中央仓库,你就不能很好的工作。如果使用 Git ,几乎所有的东西都可以简单地在你的本地机器上完成。例如进行提交,查看你的项目历史,合并或者创建分支等等。至于在哪里工作?什么时候工作? Git 不会给你施加任何限制。
3 撤销错误操作
每个人都会犯错,而使用 Git 的最大好处就在于,几乎在所有的情况下你都能 “撤消” 你的错误操作。比如如果你忘记了把一个小小的改动包含进来,因此你要改正你的上个提交。又或者你想要撤销一个完整的提交,因为这个功能有可能是不必要的。当发生了很严重的错误时,你甚至可以通过恢复引用日志来让一个提交不可见。你可以放心,Git 几乎很少真正地删除数据。
4 可靠性高
不用担忧,你不会在 Git 中搞砸任何东西,这种感觉是不是非常好?在你的 Git 项目中的每一个团队成员都克隆了整个项目在他们的本地计算机,这个本地克隆也可以看作一个完整的项目备份。除此之外, Git 上的操作几乎都是进行数据添加,几乎从不删除数据。这意味着丢失数据或是仓库损坏的情况几乎不可能发生。
5 让提交更有意义
只有包含了相关的改动的提交才有意义。想象一下,如果一个提交中包括一个新添加的功能 A ,还包括功能 B 的一部分改动,并且还存在一个对错误 C 的修复。这样其他的团队成员就很难理解这个提交的意图,而且当其中的一个改动出现了错误,撤销起来也非常麻烦。利用它独一无二的 “暂存区(staging area)” 概念,Git 可以帮助你打造很细微和精准的提交。你可以准确地判断哪些更改将被包含在你的下一个提交中,即使只是一行改动。Git 真正提高了对版本控制的实用性。
6 更高的自由度
当使用 Git 工作时,你可以定义一个对项目和团队有意义的工作流程。使用 Git 也不需要其它的要求。你可以连接多个远程仓库,使用 rebase 来替代合并,或者在需要时可以使用子模块。当然,你也可以简单地像 Subversion 那样仅仅使用一个远程的集中式仓库。无论你使用什么样的工作流程,它都有各种各样的优点。
7 避免混乱
关注点分离可以更明确地了解事情的进程。当你工作在功能 A 上时,不应该有任何人受到你未完成的代码的影响。如果那个功能是完全没有必要的话呢?或是完成了对它的一些改动提交后,你注意到你完全错了呢?分支功能就可以解决这些问题。当然其他版本控制系统也都有分支,但是 Git 真正的把它改进地更快速,更简单了。
8 顺应潮流
聪明的开发人员应该顺应潮流。Git 正在被越来越多的知名公司和开源项目所使用,如 Ruby On Rails,jQuery,Perl,Debian,Linux 内核等等。拥有一个大型的用户群体是一个很大优势,因为往往会存在很多系统去推动他的发展。大量的教程,工具和服务,这让Git更加具有吸引力。
为什么要使用 Gerrit?
Gerrit,一种开放源代码的代码审查软件,直观的使用网页界面进行展示,底层使用的 Git。利用 Gerrit 可以实现不同分支的不同审核策略,项目管理员和开发人员可以在网页上审阅提交的代码改变,决定是否可以提交,或者是退回修改。
二、Gerrit 使用说明
Gerrit是一种开源的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的开发人员,可以相互审阅彼此修改后的代码,决定是否能够提交,退回或是继续修改。它使用版本控制系统Git作为底层。
网站 code.google.com/p/gerrit/
源代码库 gerrit.googlesource.com/gerrit
Gerrit 地址:gerrit.batmobi.cn,使用域账号及密码进行登陆
配置公钥。将在 Git Bash(使用请查看下面的Git for Windows, Git BASH说明) 中使用 ssh-keygen 生成的公钥上传到 gerrit
Gerrit 还集成了 Gitweb,可以查看 git log
三、Git for Windows, Git BASH
Git BASH让我们可以在 Windows 底下模拟出跟在*NIX 一样的操作,你可以直接敲入 git 的命令。
下载并安装
32位:https://github.com/git-for-windows/git/releases/download/v2.17.1.windows.2/Git-2.17.1.2-32-bit.exe
64位:https://github.com/git-for-windows/git/releases/download/v2.17.1.windows.2/Git-2.17.1.2-64-bit.exe
生成密钥串
$ ssh-keygen,一路回车即可
设定 git 资料,必须严格按照user.name=域账号和 user.email=公司邮箱设置
$ git config --global user.name “yourname” $ git config --global user.email yourname@batmobi.net
使用,拉取一个项目
$ git clone ssh://@gerrit.batcloud.cn:29418/
六、Git-flow 使用说明
git-flow就是针对 Git-flow 规范设计的,他是一个 git的扩展,把一群 git指令集合在一起,通过此工具集让规范能够更好的落地实施,避免各自使用 git 命令操作分支的不规范。
从远程拉代码分支
$ git clone ssh://@gerrit.batcloud.cn:29418/
进入代码目录初始化 git flow配置
git flow init
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for “next release” development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []v
开发流程
git flow feature start
这时候将会在本地创建一个feature/ 的分支,并切换到该分支,开发人员进行该功能开发
相当于git 原生命令:
$ git checkout -b feature/ develop,即基于develop分支生成新分支 feature/,并切换到该分支
git add …… git commit ……
git flow publish feature/,在 feature/ 分支进行开发,如需调试,可 push 到远端
git flow feature finish ,在完成开发时,使用此命令结束此 feature 分支,并 merge至 develop 分支
结束 feature 分支,并 merge 至 develop
相当于 git 原生命令:
$ git checkout develop
$ git merge --no-ff feature/
$ git branch -d feature/
git push
测试流程
在一个版本结束提交 QA测试时进行该流程,该流程由项目管理者操作,开发人员无需操作
git flow release start
为版本号,如1.1.0,此命令将会从 develop 分支生成测试新分支 release/,并切换到该分支
相当于 git 原生命令:
$ git checkout -b release/ develop
git flow release publish ,此命令 push 分支提供测试同学进行测试
相当于 git 原生命令:
$ git push
测试同学进行测试,如若测试过程中有 bug 需要修正,则在此 release/上修改,修改完成后再 push 提交测试
git flow release finish ,此命令即在测试流程完结后,将代码 merge到 master和 develop分支
相当于git 原生命令:
$ git checkout master
$ git merge --no-ff release/
$ git tag -a v1.1.0
$ git checkout develop
$ git merge --no-ff release/
$ git branch -d release/
push 主干 master 分支,并打 tag
$ git checkout master
$ git push
$ git push origin v1.1.0
push 开发 develop 分支
$ git checkout develop
$ git push
hotfix 流程
业务上线后,发现有 bug 需要紧急修订,此时需要用到 hotfix 分支
git flow hotfix start ,此命令基于 master 分支新建分支 hotfix/
在该分支上进行 hotfix
git flow hotfix finish ,此命令会结束 hotfix分支,并 merge到 master分支和 develop分支
相当于 git 原生命令:
$ git checkout master
$ git merge --no-ff hotfix/
$ git checkout develop
$ git merge --no-ff hotfix/
push 主干 master 分支,并打 tag
$ git checkout master
$ git push
$ git push origin v1.1.1
push 开发 develop 分支
$ git checkout develop
$ git push
参考:https://github.com/nvie/gitflow