源代码管理的十条戒律

标签: Uncategorized | 发表时间:2012-03-07 17:04 | 作者:flychen
出处:http://flychen.com

源代码管理是我们工作中很重的一部分,是很多开发组的生命。但是我们往往在这方面犯错,不理解很多基本的,核心的版本控制的概念。

我在这里列出了十条建议,可以说是戒律。虽然我会用 Subversion 和 .NET 来做示例,但这些戒律和你用的 编程语言还有源码管理工具无关。

1. 彻底抛弃 VSS!

VSS 已死,就让它离去吧。它曾经很有用,但是现在其他 VCS(Version Control System)已经远远超越了它。微软也决定从明年开始 不再支持 VSS 了。

老实说,在 1995 年,VSS 是一个伟大的工具,但是它的光环早已被它的晚辈,Subversion,Git 和 Mercurial 夺去。

2. 没有进入版本库,它就不存在

你应该每天把这条念一遍 – “工作进展的唯一标准就是代码进了版本库”。在代码进入版本库之前,它相当于不存在。

  我承认你的代码藏在你机器的某个角落,但是对于其他人来讲,这有何意义?他们不能拿到你的最新版本,他们不能和你的版本合并,你也不能部署你的代码,一旦你的硬盘坏了,一切将烟消云散。

如果你坚持的执行这一条的话,你会发现其他的好习惯会随之而来。你会自觉的把任务分成小块所以你可以经常提交代码。你会更加频繁的更新,集成代码。最重要的是,经常提交代码说明了你正在做东西。

3. 尽早提交,尽快提交,经常提交

紧接上面一点,防止“幽灵代码”(只在你本地机器上能看到的代码)的唯一的方式就是把代码尽快的提交到版本库。这么做还有以下好处:

▲每次提交都会生成一个新的版本,给你回滚的机会。假如你把代码搞乱了,你是希望回滚到一小时前还是一个星期前?

▲间隔的时间越长,代码合并越困难。合并代码从来不是一件好玩的事情。当你好几天都不提交代码,你会突然发现,你已经累计了 50 个冲突要解决,你大概会疯掉。

当你坚持经常提交代码的习惯以后,你会发现你的工作、代码提交会呈现出一定的规律。这个规律可以用来指导你的开发工作。当你发现你的团队好几天都没有代码提交的时候,你就会意识到 “something is wrong”。

4. 在提交前检查你的更改

提交代码到版本库看起来太简单了。反正在项目的根目录往下有东西更改了,提交吧!这样会导致你提交了一堆垃圾。很多人看到下面的对话框的时候,往往是选择所有,然后搞定!于是你的代码库就被污染了,例如 debug 文件夹之类的。

源代码管理的十条戒律

还有一些情况是人们提交代码前不检查自己到底更改了什么。例如一个项目配置文件,你会记得你改了什么吗?也许这次修改就不应该提交呢?如下图所示,这个 Web.config 文件为什么被修改了?你可以通过 SVN 工具对比来查看更改。对于一些可能被更改但是不需要进入版本库的文件,例如 Thumbs.db,你可以用 SVN 的“ignore”功能来排除它。

源代码管理的十条戒律

源代码管理的十条戒律

5. 认真填写“commit messages”

填写 commit message(提交注释)是有一点枯燥,但是想象一下别人看你的提交注释的时候是拿着一把斧子,你把他逼疯了他就来砍你!所以不要写“更新了一段代码”这种提交注释,你会把别人逼疯掉。

“commit message”的目的解释你提交代码到底修改了什么。你也许不记得你一年前提交的一段代码是为什么,但是 SVN 的注释会让你想起来。

源代码管理的十条戒律

所以,请不要写以下这些注释:

▲修复了一个 bug

▲有一个拼写错误

▲更新 1024

▲这就是一坨屎

▲提交了

你还有见过比这个更烂的注释吗?还有,任何一个人的注释应该是不一样的,而且从逻辑上来讲永远不可能一样,因为你每次提交代码的基础一定是不一样的,所以你做的事情不可能一样。

6. 你必须自己提交代码,而不是让别人代劳

这个听起来有些奇怪。但这种事情确实存在,而且我还遇到过不止一次。有一些团队为了保证代码库的干净,让一个人专门负责审核和提交代码。这并不是一个好习惯。

首先,源代码管理并不是为了保持代码的纯净,起码在开发过程中不是这样。它的目的是让团队更频繁的集成各自的工作,当有问题的时候可以回退。在这个过程中,并不需要每一步都很完美。只有在版本发布的时候,我们才需要,或者尝试去达到“干净的代码”。

还有,从开发者的角度来看,这么做等于没有源代码管理。因为它意味着没有代码集成,没有回退,没有 blame log,什么都没有。你只是坐在那里写代码,然后在你也无法确定的时间把代码交给你的老板。

7. 数据库的版本控制是必须的

源代码管理的十条戒律

这是有很多人想做,但是觉得很困难而做不到的一点。这里的问题是,很多应用没有数据库根本无法运行。所以如果你不把数据库加入版本控制的话,你的应用是不完整的。

大部分的版本控制系统只针对文件系统工作,例如 HTML,CSS,图片,配置文件等等任何保存在文件系统中的东西。但是对于数据库中的数据却无能为力。

不过现在也有一些数据库版本控制工具,例如 Red Gate 出品的  SQL Source Control。关于这个工具我曾经写过很详细的文章  Rocking your SQL Sourc Control world with Red Gate,我在这里就不赘述了。总之,数据库的版本控制也很容易了!

8. 编译出来的文件不应该加入版本控制

简单的说,就是任何自动生成的东西都不应该放在版本库里面。以 .NET 为例,所有“bin”,“obj”文件夹下面的东西(.dll,.pdb 等等)都不应该加入版本库。

为什么?因为如果这么做了,你团队的其他人会恨死你的。每次他们更新代码都会用你的编译输出来替代他们的编译输出,会导致他们本地的很多东西不能用。另外一个原因是,你完全没有必要把这些编译输出放在版本控制里面,它们只是在浪费服务器的硬盘和带宽。

9. 别人不在乎你的个人配置

很多时候,人们没有意识到它们正在提交它们自己的个人配置到版本库。开发工具往往会生成一些配置文件,记录你的文件路径,字体设置,快捷键设置等等,这些东西只对你有用。以 .NET 项目为例:

源代码管理的十条戒律

10. 依赖项也需要添加到版本库

虽然这是最后一条,但也是很重要的。如果你的代码需要依赖第三方的类库或者文件,你需要把这些文件也添加到版本库。你不能认为程序在你的机器可以跑,就在别人的机器上也能跑。你团队的其他成员也许没有这些依赖的文件,他们更新了你的代码以后,会导致项目无法编译或者程序无法运行。

我今天还遇到一个这样的问题。我拉下了很久以前的一个项目,然后出现下面的编译错误:

源代码管理的十条戒律

这个项目也是我开发的,以前的工作环境总是有 NUnit 的,但是现在没有了,所以出现了这些错误。

总结

这十条的每一条都很简单,老实说都是很基础的东西:及时,尽早的提交代码,充分了解你提交的东西,并确认它们确实需要被提交到代码库,解释你的提交,自己提交自己的代码,不要忘记数据库版本控制,不要忘记依赖项。但请你忘记 VSS :)

英文原文: http://www.troyhunt.com/2011/05/10-commandments-of-good-source-control.html

相关文章

from 博客 – 伯乐在线 http://blog.jobbole.com/14787/?utm_source=rss&utm_medium=rss&utm_campaign=%25e6%25ba%2590%25e4%25bb%25a3%25e7%25a0%2581%25e7%25ae%25a1%25e7%2590%2586%25e7%259a%2584%25e5%258d%2581%25e6%259d%25a1%25e6%2588%2592%25e5%25be%258b


您可能也喜欢:

Git 分支管理是一门艺术

检索系统的下游管理

windows XP下搭建iphone开发环境

网络爬虫之验证码识别
来自无觅网络的相关文章:

主板检测卡错误代码含义 (@ikanon)

代码注释写得最牛B的淘宝程序员 (@citydog)

iPhone主题天气代码查询教程 (@54kuku)

阅读代码的一些心得(1) (@aisharing)
无觅

相关 [源代码 管理 十条] 推荐:

源代码管理的十条戒律

- - 搜索引擎技术博客
源代码管理是我们工作中很重的一部分,是很多开发组的生命. 但是我们往往在这方面犯错,不理解很多基本的,核心的版本控制的概念. 我在这里列出了十条建议,可以说是戒律. 虽然我会用 Subversion 和 .NET 来做示例,但这些戒律和你用的 编程语言还有源码管理工具无关. VSS 已死,就让它离去吧.

时间管理的十条体会

- Freeman - Xiaoxiao's Weblog
  接受了一个邀请,再次把三年前的PPT讲了一遍,还好. 前天晚上认真思考了一下,我认为以下是时间管理最重要的十点,分别解释一下:. 没有目标或不以结果导向,单纯的做时间管理没有意义. 小王说每天计划打一次篮球,但总是有种种事情把打球的时间给耽搁了. 大家都觉得时间不够用,都想找一个万全的方法解决时间的问题,为什么打篮球总是没有,不如仔细想想为什么要把打篮球列在每日的Todolist里.

【干货】创业公司如何提高管理能力?十条法则教你!

- - @i黑马
【i黑马导读】创业或者初创的互联网公司,由于很多创始人都是由产品经理或者是技术工程师出身,所以,对于如何管理团队反而大伤脑筋,下面来自知乎网友. 李楠的回答,这10条法则可以给创业者一定参考与学习. 接手任何一个部门的最重要的事情,是明确或者重新调整组织架构. 架构的关键是:谁在什么位置,负责什么内容,一定要明确.

开源代码搜集

- friedvan - 增强视觉 | 计算机视觉 增强现实
很早就在导航栏上加了代码这一页,但是一直没有添加内容. 这两天抽空把之前用过,留意过的代码分类整理了一下. 各位如果在平时学习,工作中遇到过对你非常有帮助的代码,请到这个页面下留言,我会不定期整理汇总更新. Tags: open source, 代码, 新闻. zz Google Summer of Code 2011几个感兴趣的项目 (6).

学习dubbo源代码

- - Java - 编程语言 - ITeye博客
1、Dubbo与Spring的整合. Dubbo在使用上可以做到非常简单,不管是Provider还是Consumer都可以通过Spring的配置文件进行配置,配置完之后,就可以像使用springbean一样进行服务暴露和调用了,完全看不到dubboapi的存在. 这是因为dubbo使用了spring提供的可扩展Schema自定义配置支持.

NFS 文件系统源代码剖析

- wuyan - IBM developerWorks 中国 : 文档库
NFS 文件系统是目前最为成功的网络文件系统,在文件共享领域有着出色的表现,特别是 pNFS 的出现,使得 NFS 文件系统在性能和规模上有了大幅提升,为其带了更为广阔的应用空间. 同时,NFS 之所以备受关注,还在于它在 NAS 存储领域的关键作用. 本文剖析了 NFSv3 文件系统源代码,使开发工程师,技术支持人员,特别是存储领域从业人员对 NFS 有更为深刻的认识.

黑客工具SpyEye源代码泄露

- SotongDJ - Solidot
在Zeus之后,另一个黑客工具包SpyEye的源代码也被泄露到网上. SpyEye是Zeus的竞争对手,它甚至可以删除受害者电脑里的Zeus. 它在地下黑客市场的零售价高达500美元. 安全公司Damballa报导,逆向工程师Xyliton破解了用VMProtect保护的SpyEye 1.3.45,发布了SpyEye 1.3.45 Loader源代码,它将允许恶意黑客开发出更复杂更难以探测的恶意程序.

Linux源代码托管在Github上

- wang - Solidot
在kernel.org服务器遭入侵之后,Linux作者Linus Torvalds于9月3日在Github上创建了帐号,将内核源代码托管到了Github. 他在邮件列表上解释说,由于master.kernel.org下线,他建立了一个临时的源代码托管仓库.

Android 4.0.3 源代码已推送到 AOSP

- - 谷安——谷奥Android专题站
16日 Google 宣布了 Android 4.0.3,该版本的源码目前已经推送到 AOSP 上,这是目前最新版本的 Ice Cream Sandwich. 这是首次推送了 4 个不同的版本,包括 Motorola XOOM、 Nexus S 和两个 Galaxy Nexus 版本.