英文原版 http://java.dzone.com/articles/10-commandments-good-source

本文转自中文翻译改写版  http://tech.it168.com/a2012/0307/1321/000001321198.shtml

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

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

程序员开发利器:源代码管理的十条建议相关推荐

  1. Boostnote是什么?-是为程序员开发的一种开放源代码记事本

    Boostnote是什么? Boostnote是为程序员开发的一种记事本开放源码应用程序. 感谢大家的支持,我们的GitHub 星数已经超过了5,200. 为程序员开发的记事本开源应用程序 大多数的笔 ...

  2. Java 程序员开发常用的工具(全)

    Java 程序员开发常用的工具 作为一名Java程序开发人员,可以的选择集成开发环境IDE(Integrated Development Environment)非常多,得益于Java是一门开源语言. ...

  3. 程序员开发必备英语基础–狂神版

    程序员开发必备英语基础–狂神版 一.开发常用英语词汇排序 A array数组 accessible 可存取的 area面积 audio 音频 addition 加法 action 行动 arithme ...

  4. Mini-XML 程序员开发手册, Version 2.5(转)

    Mini-XML 程序员开发手册, Version 2.5 目录 中文翻译:Z.F , mail: zhfjyq@gmail.com ,http://blog.csdn.net/bluesonic 序 ...

  5. 程序员,用NuGet管理好你的包包(转)

    每个女人都有很多包包:其实男人也有,但只有会写程序的男人才有 -- 代码世界中的大"包"小"包".这些大包小包,有花钱买的,有从开源市场淘的,也有自己或同事亲手 ...

  6. 程序员开发软件的意义到底在哪?

    有一篇热文<写了 8 年的代码,做过的项目都下线了,程序员的意义在哪里!>,作者 8 年工作和业余时间开发几十个项目,几乎都关闭了. 想当初,很用心的去开发每一个项目:如今,这些项目只能一 ...

  7. PHP程序员开发win32应用程序之梦

    相信做纯WEB开发的PHP程序员都会想过,要是PHP能开发windows本地应用程序多好,于是上网一查找出来的很多都是"PHP-GTK"的老文章,这东西好像已经没人维护了,随便看了 ...

  8. 活久见!程序员开发进度太慢被公司告上法庭,索赔 90 万!

    loonggg 读完需要 5 分钟 速读仅需 2 分钟 大家好,我是校长. 真的是开眼了,活久见啊,公司因为嫌弃程序员开发进度太慢,耽误上线,竟然将程序员告上了法庭,要求程序员赔偿公司经济损失 90 ...

  9. 程序员开发常用英语词汇汇总,满满的干货!

    "我英语不好可以学编程吗"相信这个问题,困扰着太多想学习编程,但英文不好的同学. 学习编程,常用的单词就那么多,只要把常见的单词学会,你的代码就能写的很6,英语和编程的关系就是这么 ...

最新文章

  1. 工厂方法模式和抽象工厂模式
  2. golang中的读写锁
  3. python自带的sum()函数和numpy库中的sum()函数的区别
  4. java部分服务出现异常_Java web service 异常
  5. POJ-1707 Sum of powers bernoulli方程
  6. C++ std::thread
  7. 从安全和不安全两个角度,教你如何发布对象(含各种单例代码)
  8. SAP License:SAP软件实施要点
  9. 转移纸缺陷在线检测系统
  10. 系统同传软件_语情快递 | 手语同传AI,你见过吗?
  11. 在Android手机上对https请求进行抓包
  12. 在浏览器输入URL,按下回车之后的流程?
  13. 【SAS NOTE】substr字符串提取函数
  14. 最好的防御就是进攻 任正非
  15. websphere 实用_将WebSphere Cast Iron Studio PGP活动与外部PGP实用程序一起使用
  16. 信息安全初窥(二):信息安全能力体系
  17. 工作一年之后的记录与总结
  18. C++ windows 创建快方式
  19. AGV车调试随手记(二)——型号:MIR250
  20. 操作系统的时钟是什么?

热门文章

  1. Request转发---应用
  2. Oracle清除缓存的命令,Oracle的get命令
  3. 12-Qt6 列表类QList
  4. clone是深拷贝还是浅拷贝_go-clone:深拷贝 Go 数据结构
  5. java calendar字符串显示_Java获取当前时间年月日、时间格式化打印、字符串转日期...
  6. tomcat mysql eclipse_eclipse与tomcat及javaweb和mysql相关内容
  7. python的learn_python_learn1
  8. mysql io线程异常_mysql主从同步IO线程NO
  9. mysql characterencoding 枚举值_mysql中enum类型理解,读完之后,大部分程序员收藏了......
  10. 网络安全等级保护测评高风险判定指引_等保知识|测评高风险项详解:安全管理中心...