源代码管理的十条戒律

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

我在这里列出了十条建议,可以说是戒律。虽然我会用 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 :)

 

时间: 2024-09-30 01:09:22

源代码管理的十条戒律的相关文章

源代码管理十诫

英文原文:The 10 commandments of good source control management,翻译:图灵社区周庆成 若是还有可以毫无偏见地涉及各个编程语言,比源代码管理软件更必要的工具,我倒是很想见识一下.源代码管理软件是我们工作的必备工具,是许多开发团队的血液.那为什么我们都会对它有所误解呢?为什么都很难理解版本控制系统的核心价值和基本原理呢? 我总结出10条惯例--如果你愿意也可以用"戒律"--意味着必须服从它而且从一开始很难去理解.它们与所有类型编程语言的

Linux环境下的Java开发(四):源代码管理

源代码管理一般包含两个方面的内容:一是多用户之间的共享,二是版本控制 .可用的源代码管理软件很多,在Windows平台大部分都是使用VSS,在Linux平台 则有CVS和SVN可用(当然,Windows平台也可用),理论上讲,SVN比CVS功能更强 大,但是我依然选择使用CVS,原因很简单,就是因为Linux系统已经自带了,随 手可得,最简单的就是最好的. 在Linux系统中,CVS并没有客户端和服务器端之分,它管理的大部分都是本地 文件.当然,CVS也可以管理远程代码库,而这里的远程代码库也仅

github-VS2013 git 源代码管理

问题描述 VS2013 git 源代码管理 "无法将本地分支 master 发布到远程存储库 origin,因为此处已存在具有同一名称的分支.您可能需要重命名您的本地分支,然后重试." 出现了这个错误,虽然我重命名分支后成功了,但是仍然存在疑问.我想要更新master分支怎么弄?难道我每次更改代码都要新建一个分支? (我github 新手) 解决方案 同遇到过这样的问题,不知道朋友的问题是不是已经解决了,我的分析和解决方式如下,多多指教: 因为github新建项目的时候选中了初始化选项

源代码管理工具TFS2013安装与使用

原文:源代码管理工具TFS2013安装与使用       最近公司新开发一个项目要用微软的TFS2013进行项目的源代码管理,以前只是用过SVN,从来没有用过TFS,所以在网上百度.谷歌了好一阵子来查看怎么安装和配置,还好花了一天时间总算是初步的搞定了,下面就简单介绍一下安装和配置过程.      一.安装和配置过程介绍            要安装TFS2013当然要先进行下载了,可以在下面的地址下载:http://www.microsoft.com/zh-cn/download/detail

azure-我的TFS 源代码管理器中的word和 excel都不能打开,什么原因???

问题描述 我的TFS 源代码管理器中的word和 excel都不能打开,什么原因??? 大家好,我遇到两个问,谁能帮我解答一下 1 TFS 源代码管理器中的word excel都不能直接打开,点击没有反应,这是什么情况?怎么解决?? 2 TFS点击解决方案.sln文件后显示"项目最近已被添加到解决方案,是否从源代码管理中获取他们"?点击是后又弹出"解决方案与有关某些项目的源代码管理信息与项目文件中的信息似乎有差异",这又是什么情况???怎么解决???? 解决方案 点

源代码管理: 项目中某些文件或文件夹的名称与当前系统 ANSI 代码页不兼容。

问题描述 提示错误:源代码管理:项目中某些文件或文件夹的名称与当前系统ANSI代码页不兼容.在重命名这些文件或文件夹或者在将"区域和语言设置"更改为与当前系统ANSI代码页兼容的代码页之前,无法管理这些文件或文件夹.有人遇到过这种情况吗? 解决方案 解决方案二:哪个版本管理工具?解决方案三:帮帮忙啊谢谢了解决方案四:VSS2005的解决方案五:如何解决啊解决方案六:ANSI格式没有问题,UTF-16.UTF-8有问题,不能正确识别,存储的文件会错乱.微软承认麻烦很大,详细的说明MSDN

vss源代码管理下的FSO文件操作权限

问题描述 受VSS源代码管理,FSO文件操作就没权限了,怎么回事啊,必须要签出该文件才可以,未签出情况下就报错没权限 解决方案 解决方案二:签出?什么意思checkout?没有checkout时候,文件是只读的

使用Team Foundation Server 2012源代码管理基本

原文:使用Team Foundation Server 2012源代码管理基本 本篇体验Team Foundation Server 2012安装及源代码管理.   □ 安装 搜索"team foundation server express 2012 安装",并安装.   □ 文档TFS 2012 安装指南和管理指南 http://examcr.am/10Ln5E4 进行下载.   □ 如何打开Team Foundation Server管理控制台 ● "开始".

获取源代码管理上的文件,不小心错误更新了本地文件,如何恢复??

问题描述 获取源代码管理上的文件,不小心错误更新了本地文件,如何恢复??急!急!急!望各位大侠救救小女啊! 解决方案 解决方案二:重写解决方案三:应该挂了,关注高手解决方案四:得不到之前的版本?解决方案五:要是你用的的是VSS的话那就没救了,只有重写要是你用的是STARTEAM的话那就迁出上一个的修改记录就好了啊解决方案六:我用的Vss,之前的版本缺少的东西太多了,哪位高手有办法帮帮忙啊,重写好麻烦的解决方案七:当然有办法,你们应该不只有你一个人用vss吧,你让你同事把他本地的签出(签出时注意要