Gitblit中采用Ticket模式进行协作开发

Git目前的代码分支管理模型中,比较主要的有Git-Flow、Github Pull Request。大家日常或多或少都在用着。

在不想安装Gitlab这种重量级的环境的情况下,如果是利用git一步步搭建团队的GIT服务的话,比较麻烦,而且维护更麻烦。Gitblit是一款比较简单的跨平台Git自托管服务器软件,支持多种授权机制整合。

Gitblit自己也定义了一种基于Ticket的代码分支开发模型。

创建标准式工单

标准式工单(Standard ticket)是通过Gitblit Web 界面创建的。这种工单可以包含 Bug, Enhancement, task, 与 Question等类型。

创建提议式工单

提议式工单(Proposal ticket)是在推送一次单步提交(single commit )的代码时创建的,通过推送到指定魔法ref目标来实现。在Web 界面中无法创建这种工单。

为什么会有这种单步提交的限制呢?

因为要从你这次提交的消息中提取工单的标题与描述。工单创建之后,你可以随意的提交代码到该工单对应的魔法分支。

什么情况下创建提议式工单?

首先懒得打开Web UI来创建工单啊。这种工单提供了一种很便捷的机制,允许你通过Git操作就可以对工单进行变更。

哪些人可以创建这种工单?

拥有clone仓库权限的任意授权用户。

git clone https://server/r/repo.git cd repo git checkout -b mytopic ...add a single commit... git push origin HEAD:refs/for/new # read ticket id from server output git branch -u origin/ticket/{id}

给已有的工单提交首个补丁集

对于那种尚未提交补丁集(patchset)的工单,可以到对应的工单分支ref来推送。

哪些人可以创建首次补丁集?

拥有clone仓库权限的任意授权用户

git clone https://server/r/repo.git cd repo git checkout -b ticket/{id} ...add one or more commits... git push -u origin ticket/{id}

向现有工单的补丁集安全的提交代码 哪些人可以向现有补丁集添加提交?

工单创建者

补丁集的初始创建者

在工单设置界面中被设置成负责人的人

拥有对所在的该仓库读写权限的任意用户

git fetch && git checkout ticket/{id} git pull --ff-only ...add one or more commits... git push

对已有补丁集的现存工单,想检出命名化分支

默认检出的工单分支是那种整数ID形式的,如果你想给本地工单分支命名的话,可以用下面的命令语法来实现。

git checkout -b my_fix --track origin/ticket/{id}

这样命名为my_fix的本地分支会跟踪到上游的工单分支。

重写某个补丁集(amend, rebase, squash) 哪些人可以重写补丁集?

Gitblit会检测非快进式更新并创建新的补丁集ref。这就保护了以前的补丁集。

git fetch && git checkout ticket/{id} git pull --ff-only ...amend, rebase, squash... git push origin HEAD:refs/for/{id}

或者如果你有RW+的权限,你可以直接用-f标识推送。

git push -f

对于重写了的补丁集更新你的工作副本

如果补丁集被重写,你不能在简单的通过pull来更新。将你的分支更新到当前补丁集的最简单方式,是用-B标识reset。

git fetch && git checkout -B ticket/{id}

如果你有未提交的代码,你可以创建一个新的临时分支,然后将你的变更以cherry-pick的胡合并到重写后的补丁集。

git branch oldticket ticket/{id} git fetch && git checkout -B ticket/{id} git cherry-pick <commitid1> <commitid2> git branch -D oldticket

Git是非常灵活的,还有很多其他的策略来解决这种情况的问题。

Gitblit中工单Ref声明格式规范(RefSpec)

Gitblit支持两种原始的ref推送声明格式:魔法式ref与补丁集ref。

创建新的提议式工单 refdescription
refs/for/new   为默认分支新建工单  
refs/for/default   为默认分支新建工单  
refs/for/{branch}   为指定分支新建工单  
向现存工单添加提议式补丁集(第一个补丁集) refdescription
refs/for/{id}   添加新的补丁集到现存工单  
添加提交到现存补丁集 refdescription
refs/heads/ticket/{id}   快进式提交到现存补丁集  
重写补丁集 (amend, rebase, squash) 魔法式ref描述
refs/for/{id}   用于重写补丁集  
工单 RefSpec 小诀窍

在refspec推送语法中,支持直接设置一些工单字段。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15655.html