A Version Controlled Project Workflow for Requirement, Coding and Continuous Integration

摘要

开发团队中,使用Word或者PDF文档,或者邮件来描述需求,可能导致同样内容的文档出现在不同成员的电脑上,进而可能导致 版本不一致。另外两次版本的需求更改,很难进行差异比较(Word和PDF文档不是简单的文本文件)。 一种解决方案是,使用文本文件(比如Markdown或者LaTeX)来描述需求,并将所有的文件纳入源代码管理。 所以,本文描述的这个工作流,将所有的文档纳入源代码管理。同时还将提到:

  • 使用Issue来跟踪需求、变更和问题解决
  • 产品、测试和开发等不同角色如何便捷的使用Bitbucket来提出并跟踪任务

环境准备

本文提到的“环境”,不是开发环境,而是对每个成员都是适用的基本工作环境。

本文提到的“源代码”,不仅仅是开发代码,而是团队运行过程中所有的文档,包括:

所有输出的成品,比如编译生成的PDF文件,不应该纳入源代码管理。

注册Bitbucket

首先注册一个bitbucket.org账号,bitbucket是一个在线的源代码管理系统,支持多个私有库, 默认每个库支持5位成员协同工作。

进入bitbucket页面之后,左侧导航栏常用的菜单为:

Bitbucket支持在线编辑和预览Markdown文档。

操作系统和Git环境

Git环境简介

当团队成员获得了某一个源代码仓库(repo)的访问权限之后,需要安装Git环境,用来提交和查看不是时期的源代码。

建议在Bash环境下使用Git。

Git的仓库(repo)有三类:

一般而言,Git环境的基本流程是:

  1. 克隆或更新本地库,将服务器上的变更,更新到本地

     git pull
    
  2. 修改、编辑源代码,标记变更的文件,并为本次变更添加一个描述

     git add file_changed.txt
     git commit -m '本次变更的描述信息'
    
  3. 可以重复上一个步骤,多次变更文件
  4. 一并提交本地的所有的更新到服务器上

     git push
    

编辑文本文档

文本文档的编辑,可以使用

移动端的访问

iOS上使用CodeBucket访问源代码库。

Android平台使用Bitbeaker

移动端通常可用于问题的讨论。

不同角色的工作流程

产品和需求的变更

需求最开始可以在问题(issue) 列表中讨论,逐步反映到需求文档中,具体而言:

  1. 新增一个问题(issue)
  2. 团队成员在每一个问题的评论中讨论
  3. 编写对应的需求文档,并在提交的时候,关联问题编号(使用英文字符井号#

    git commit -m '新增某某需求,参考问题 #1'
    

附录

全局规则

Markdown基本语法介绍

bitbucket中可以直接编辑和预览文件。 详细的语法说明,可以参考:https://bitbucket.org/tutorials/markdowndemo/overview

常用的语法有如下:

LaTeX基本语法介绍

常用的Git场景

本小节主要参考文献[Chacon and Straub, 2014] 1

下列的代码段中,以$打头的命令需要在bash中执行。其余的为命令执行的结果。

如何修改最近一次commit的备注2

  $ git commit --amend

想暂时回到某一个历史版本3

有的时候,突然发现了一个问题,但是明明记得之前某个时间段是正常的。 此时,需要回到之前的某一个版本(commit),尝试找到是哪一次提交引发了该问题。

  1. 列出最近的一系列提交

     $ git log --pretty=oneline -n 20 --graph --abbrev-commit
     * 9ecb341 fix markdown href syntax
     * 3f0828b fix markdown coding syntax
     * 72fc362 fix markdown syntax
     * 4175860 draft for vcs wrkflow
     * 94259e0 fix typo of lataxing
     * 8ecbced no center for equation
     * 794bcee blockquote equation
     * b0ca566 fix div in markdown
    
  2. 临时返回到之前的某一次提交

     $ git checkout 94259e0
    
  3. 使用二分查找,反复执行git checkout,直到定位到某两个相邻的版本,也即, 前一个版本还是正常的,后一个版本就出现了问题

  4. 比较这两个相邻版本的差异,分析问题

     $ git diff 4175860 94259e0
    
  5. 回撤这些临时版本

     $ git checkout master
    

如何在当前的版本上做一些实验性的修改,但不确定是否提交

充分利用Git的Branch特性,在当前的版本上创建一个分支,然后做实验性的修改。

    $ git branch experiment

确认了这些修改之后,可以将实验分支上的更改合并到当前位置

    $ git checkout master
    $ git merge master experiment

另外,关于分支合并,rebasemerge的区别可以参考这篇文章(这个区别一般 只有开发才会用到)。简单理解:

Bitbucket和Github在Acadamic License上的比较

在Acadamic License结束之后,Bitbucket依然允许5人小组的私有库,但是Github需要付费,才能继续使用私有库。

参考文献

  1. Chacon, S. and Straub, B. (2014). Pro Git, Second Edition.: NY. Apress.

  2. Git Basics - Undoing Things

  3. Temporarily switch to a different commit