规范化的软件项目演进管理

从 Github 使用说起

1   前言

首先,本文的层次定位是:很基本很基础的 Github 工具的入门级应用,写给入门级的用户看的。

基本上工作过几年的人,下面描述的这些技能和思想,都应该被打磨成了一种习惯,或者说是标配的属性了吧,已经不齿于列为 技能 了。但是因为笔者也菜鸟过,在学习这些技能,接受这些思想和培养这些习惯时走过不少弯路,同时也浪费了不少时间,所以想把这些经验和教训写下来,给后来人学习时提供一点参考意见吧。

关于为什么要学会用 Github ,先用最朴素的比方来开头的引子吧。

就拿年轻人置业买房来说,先不说房子的市场属性和社会属性的种种不好,单说它的好处:“房子(House)实际是一个家(Home)的实际物理载体,有了它之后,家庭或者个人的生活经历能够得到持续的积累和传承,家里的用品和设备也能得到比较好的积累,而不是像 租房 打游戏战的时候,每迁移一个地方就面临着一大堆东西的舍弃,更不用说自己会花些心思在家的小细节装饰和整体风格上做功课了”

Github 就是这样,相当于给了你的智力成果一个房子,一个家,让你在这上面不断形成积累,而且会强化你这些碎片化的积累,最后形成气候,同时因为是“家”,主人也会在情感上更加珍惜,更加的专注的投入,对细节进行打磨,这样最后才可能做出精品。

2   准备工作

2.1   预备知识

  • Git版本管理的基本理念
    • 免费
    • 分布式
    • 版本控制系统
  • Git的客户端管理工具 [1]

关于Git版本管理的基本理念,可以直接看官方文档 [2] ,各国语言都有,自然也少不了中文 [3] ,但是建议英文好的同学,直接阅读英文原版,这样有助于理解命令。如果喜欢看出处的纸质教程的,国内也相应的出版物:《Git权威指南》 [4] 可以参考。

由于Git的理论和操作是属于工具型的,最好的办法就是多在项目中磨炼,熟练即可,其实常用的功能了并不多,上手也不难。

本文中使用的客户端管理工具是:Linux平台下的git工具。

在Linux下安装git客户端很容易,只需要在机器联网状态下,使用如下命令即可:

sudo apt-get install git

如果在Linux Desktop里面需要可视化界面,则安装:

sudo apt-get install gitk
[1] 《Git客户端及图形工具》
[2] 《GitBook-Pro》
[3] 《GitBook-Pro-中文》
[4] 《Git权威指南》

2.2   预备平台

在掌握了基本的git的版本管理理念之后,就需要实地操作了。所幸的是,对于普通的个人或者小团队开发者,已经有成熟稳定的git公共服务提供商。普通开发者,不用去搭建git的服务器及服务管理系统,就可以轻松便捷的享受到git的远端备份和协作服务了。

注意

如果是纯粹的个人开发者,而且也没有云端备份和多人协作的需求人,直接在本地机器就安装git客户端就可以使用离线和git版本管理系统了。当然如果想自己搭建私有的git远端仓库服务器,由于git开源的特性,同样也很容易获得丰富的文档和技术支持。

因为项目版本管理及项目交流协作的重要性,国内外已经有很多相当成熟的 git 公共服务了。

国际上有:

国内有:

关于以上几类服务的选择,可以参考如下规则:

  • 如果想国际化,又有开放精神的,请选择Github,仅对开源项目免费支持
  • 如果想国际化,想建立私有项目的,请选择Bitbucket,个人团队可以免费建立私人项目
  • 如果想获得更多的私人项目的权限,请选择 git@osc,支持1000个免费项目,不限制私有或公有。

由于在 IT 界, Github 基本上成为了程序员的精神圣地,成为了git的代码名,所以对于初入此门的用户来说,最好也要在 “行业圣地” 安营扎寨。

只需要完成如下两个步骤,就可以使用 Github 提供的服务了:

  • 注册一个 Github 的账号
  • 创建一个 Github 项目主页

而更高级的全球化 "码农" 社交,还至少需要如下动作:

  • Watch一个大牛的项目,时刻关注动态,紧跟步伐
  • Fork一个项目,自己修改,成为社区贡献者

下面将以 Github 对具体对象,来讲解如何使用git工具来

3   项目内容

  • 可正常运行源代码
  • 项目简介文档-ReadMe

本文将以一个 Github 开源项目为例子进行简单讲解。

本文 GitHub 项目示例

gt-java-sdk

3.1   源码

这个的重要性就自然不用说了。既然是开启了代码项目,项目就一定会有它的作用。

一般是如下一个或者几个作用:

  • 个人兴趣练手
  • 存储和记录某些信息,比如文档
  • 为某个需求提供生产力
  • 提供某种功能的开源解决方案,服务大众
  • 其它。。。

IT界流传过这样一句极端的话: 不产生生产力的代码实际上和垃圾没有什么区别 。 这句话有些极端,毕竟有时候出于学习和兴趣的代码也其实也有它的存在意义的。总之,话不多说,这些话不管极端还是中肯,其实主要是表达一个意思:你要让做的事情有它的价值,你才会有动力长久维护下去,而一般情况下,源码就是最基本的IT项目的价值体现载体。

示例项目中的价值体现就在于java的源码项目,解决的问题就是:提供一种验证服务的部署SDK。而且这个项目一直在随着业务升级在不断的迭代更新,已经部署到N多服务器上,持续的产生着生产力,所以有人Wathc,Star这些都不奇怪了。

3.2   项目简介

项目简介,就是项目源码的 “配套” 设施。是一种最快速让别人了解你项目的向导说明。在 Github 中的体现就是ReadMe。

这里面的项目简介,还不是像wiki那样的重试文档系统,而是在项目根目录下的 ReadMe 文本文档。一般的Git的公共服务提供商,例如:Github , Bitbucket 都会默认将项目根目录下的 ReadMe 文件进行渲染,以主页文档的方式呈现出来。

项目简介支持两种渲染格式:

  • Markdown
    • 优点

      语法简单,上手容易,适合写小型博客文摘

    • 缺点

      支持的语言特性有限,不太适合开发大型文档系统

  • RestructuredText
    • 优点

      语法特性丰富,适合小,中,大型文档的系统开发

    • 缺点

      实现复杂高级的功能时上手的门槛也比较高

两种写文档的方式的具体细节可以到网上查阅相应的语法即可,在此不再赘述。总之,熟练使用这两种语言中的一种,可以使得写文档者以后就更多的关注于文档的内容的产生,而不是格式的调整了。

个人比较偏爱 restructuredText 来写ReadMe,主要原因如下:

  • 天然支持生成目录及文章锚点
  • 支持文章内交叉引用
  • 有比较友好的表格语法
  • 很多很多的其它很强的语法特性
  • 自己在开发大型文档的时候都使用rst,所以就不用和markdown混用了

一个比较典型的ReadMe的内容应包括但不限于:

  • 目录
  • 项目介绍
  • 安装方法
  • 使用Demo
  • 发布路线图

具体可以参考示例项目的 ReadMe 的写法。

4   常用功能

一个常见 Github 项目,常用的功能图如下:

即:

  • commits 提交记录
  • branches 分支
  • release 发布版本

下面将针对每一块进行详细介绍。

4.1   commits

用户在本地的工作空间里面为项目添加新功能或者修改bug,不断的提交,更新项目的版本,这样促使项目不断的向前推进迭代。这些提交过程(commits)日积月累,就由git形成了稳定的提交线路图。

原则上,用户应该尽量勤快提交,因为这样可以小步快速迭代,而且即使出了问题也可以在回滚的版本精确度也会更高:git可以将项目版本恢复到任何的纳入版本管理的提交节点处。

4.2   branches

分支是git最重要的特性,这是项目要进行比较大的修改,而且要保证原分支特性能够得到妥善管理时的一个重要功能。使用分支功能,可以很方便的看到产品的各种重要衍生阶段和归并阶段,同时也极大的方便了开发者在这几个分支之间进行切换。

针对此特性,还诞生了不少工作流,比较典型的分支工作流如下图:

4.3   releases

在git中除了 分支branch 的概念外,还有 标签tag 的概念。

通过tag的相应命令,为某个里程碑的可发布版本打上标签,推送到 Github 上之后的体现形式就是在 relases 选项卡里面提供了tag的各种线路图,直接打包成压缩包文件供用户统一下载。

当然此处也可以针对每个发布的节点标签写上发布日志,但是一般不建议这样,因为这样这些信息就存储在 Github 信息系统里面了,而不是存储在git项目里面了。一般建议将这些信息写在ReadMe里面,这样可以维持项目的完整性,同时也没有丢失掉项目线路图的具体迭代描述。

5   开发和维护基本过程

在开启了自己的 Github 项目之后,然后就是不断地往里面添加新特性,迭代维护了。

首代产品开发基本的流程如下:

  1. 在master分支上开发出第一个可用的项目版本并提交
  2. 打上tag并提交测试在ReadMe写好发布版本号及发布特性 tag保证了开发和测试及其它人员描述对象的一致性,开发版和稳定版的tag有不同的命名方式
  3. 针对具体的tag的源码进行测试并书写测试报告
  4. 测试代码,发现问题,重复(1~3)的步骤,直到最后测试通过后,准备发布前,在ReadMe写好发布版本号及发布特性
  5. 给项目打上发布版的tag,正式发布此代码
  6. 部署人员将代码部署到生产场景,上线运行

在修复问题的时候,有如下基本流程:

  1. 发现bug,或者要增加新特性
  2. 在当前分支的当前节点处新建一个dev分支并切换过去
  3. 在dev分支上完成功能(同样测试迭代到最后通过测试的“真正”完成)
  4. 将dev分支合并到maser分支,并打上发布tag

当然,上述流程只是一种最简单常用的工作流,纯粹是用来抛砖引玉。由于git具有很大的灵活性,用户完全可以根据项目复杂度,团队规模来定义适合自己的工作流。

有兴趣的同学可以搜索 “git 工作流” 或者 "git work flow" ,遵守这些工作流,对规范个人开发习惯或者加强团队协作效率都是极其有帮助的。

6   总结

虽然大牛们总是告诫小白们,不要迷恋工具。但是不可否认,好的工具确实是代表了先进的生产力。

在熟悉了git/github之后,个人可以得到如下改变:

  1. 不再为项目版本管理而烦恼
  2. 做事永远有后悔药
  3. 不用担心电脑硬盘挂掉
  4. 可以让项目形成稳定的路线图,整合碎片化的成果
  5. 自己的智能成果得到了积累
  6. 自己的品牌也会有展现的平台

希望更多的软件版本管理的初学者们能够尽快的养成良好的版本管理系统和高效的版本管理手段,别的不说,至少有一点非常重要的作用就是:

能够保证让软件项目组所有的人描述一个项目对象时,精确的确定是同一对象,这样可以少去很多麻烦,少去很多扯皮拉筋的不必要的冲突。

这应该是在群体性软件活动里面,除了协作之外个人认为最大的作用了—— 一个公正的物证平台


作者: Harmo哈莫
作者介绍: https://zhengwh.github.io
技术博客: http://www.cnblogs.com/beer
Email: dreamzsm@gmail.com
QQ: 1295351490
时间: 2015-10
版权声明: 欢迎以学习交流为目的读者随意转载,但是请 【注明出处】
支持本文: 如果文章对您有启发,可以点击博客右下角的按钮进行 【推荐】

规范化的软件项目演进管理--从 Github 使用说起的更多相关文章

  1. 软件项目量化管理(CMMI高成熟度)实践经验谈——之项目管理过程策划篇

    续:软件项目量化管理(CMMI高成熟度)实践经验谈--之概述篇 二.项目管理过程 软件开发项目管理过程,从项目全视角来看,分为售前.售中.售后等三个大的阶段.本文所谈的是售中阶段项目管理过程,在售中阶 ...

  2. Atitit 软件项目非法模块与功能的管理与  监狱管理的对比 原理与概论attilax总结

    Atitit 软件项目非法模块与功能的管理与  监狱管理的对比 原理与概论attilax总结 软件项目中的非法模块非法功能非法分子与人类中的非法分子很是相似,必须要建议不同的的约束管理标准化... 软 ...

  3. Coding 初级教程(一)——用GitHub的GUI客户端对Coding的项目进行管理

    一.概述 二.Git基本概念 1.有关存储的四个概念 2.分支(branch) 三.项目管理实战操作 1.安装 GHfW(GitHub for Windows) 2.在Coding上新建一个项目(新建 ...

  4. <p>在我们的实际软件项目中,管理团队事实上比写代码或者实现一个客户的需求更为的有挑战性。由于编程实际上是和机器打交道,而和机器打交道,仅仅要你符合机器预定的逻辑,</p>

    在我们的实际软件项目中,管理团队事实上比写代码或者实现一个客户的需求更为的有挑战性. 由于编程实际上是和机器打交道.而和机器打交道,仅仅要你符合机器预定的逻辑, 一步步迈向解决这个问题的道路上一点都不 ...

  5. 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...

  6. Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    Net 项目构建基于Jenkins + Github + Mono 的持续集成环境 阅读目录 1 安装 2 配置 3 测试 在Redhat enterprise 6.5 的服务器上,为在gutub 上 ...

  7. 如何用命令将本地项目上传到github

    一.Git终端软件安装 1.下载windows上git终端,类似shell工具,下载地址:http://msysgit.github.io/ 2.安装方法,打开文件,一路点击Next即可 3.安装完成 ...

  8. 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路

    layout: post title: 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路 key: 20180517 tags: OAA flow chart se ...

  9. PMP:11.项目采购管理

    项目采购管理包括从项目团队外部采购或获取所需产品.服务或成果的各个过程.  项目采购管理包括编制和管理协议所需的管理和控制过程,例如,合同.订购单.协议备忘录 (MOA),或服务水平协议 (SLA). ...

随机推荐

  1. ubuntu下安装wordpress

    网上大多都是说放在var/www下面 实际上新版的ubuntu默认放在 var/www/html 下面 当然这个配置是可以修改的

  2. Linux常用命令笔记一

    笔记1:查看ubuntu是32位还是64位的方法及其版本号 查看ubuntu是64还是32的命令如下: uname -m 如果是i386到i686,那就是32位系统:如果是x86_64 ,那就是64系 ...

  3. Daily Scrum 12.16

    今日完成任务: 完善了资源界面的UI设计:解决了PDF显示相同的问题:解决了下载时有时找不到文件的问题,因为上届建了upload和resource两个文件夹存文件,写代码时候写乱套了. 明日任务: 黎 ...

  4. 分享个win平台cocos2d-x创建项目的快捷方式

    由于长期使用vs开发,相信使用vs开发的同学们也和我一样,都习惯点击图标然后就新建项目了,不是很适应命令的方式 由于vs2012一般都是win7 win8 win8.1这类系统开发,而这些系统,都是自 ...

  5. 深入研究C语言 第一篇

    一. 研究过程 1.第一章:创建编译环境: 我们首先下载TC2.0,找到其中与编译连接相关的程序和文件: (1) 编译器:TCC.exe (2) 连接器:tllike.exe (3) 相关文件:c0s ...

  6. IOS 问题集锦

    1._ UIWebview 拦截URL的时候:_NSCFString containsString:]: unrecognized selector sent to instance 的解决方案 NS ...

  7. Java 第27章 JDBC

    JDBC 模版 JDBC 的工作原理 JDBC API 提供者:Sun公司 内容:供程序员调用的接口与类,集成在java.sql 和javax.sql 包中,如: DriverManager 类 Co ...

  8. Ubuntu16.04下面配置java环境变量

    我在ubuntu 16.04下面配置java环境变量的时候,开始在网上查信息的时候,没太注意ubuntu的版本,结果在.bashrc下面设置,在.profile下面设置,都不成功, 后面才想起来搜索u ...

  9. svn不能添加.a文件的解决方法

    上次说用svn add命令添加.a文件,下面是另外的一种解决办法: 修改~/.subversion/config文件,增加一条 # global-ignores = *.o *.lo *.la *.a ...

  10. spring batch部分

    引用高人的:http://kanpiaoxue.iteye.com/blog/1768887