(这里的内容本来是《怎样尊重一个程序员》的一小节,但由于Git的使用引起了很普遍的不尊重程序员的现象,现在特别将这一节提出来单独成文。)

Git是现在最流行的代码版本控制工具。用外行话说,Git就是一个代码的“仓库”或者“保管”,这样很多人修改了代码之后,可以知道是谁改了哪一块。其实不管什么工具,不管是编辑器,程序语言,还是版本控制工具,比起程序员的核心思想来,都是次要的东西,都是起辅助作用的。可是Git这工具似乎特别惹人恼火。

Git并不像很多人吹嘘的那么好用,其中有明显的蹩脚设计。跟Unix的传统一脉相承,Git没有一个良好的包装,设计者把自己的内部实现细节无情地泄露给了用户,让用户需要琢磨者设计者内部到底怎么实现的,否则很多时候不知道该怎么办。用户被迫需要记住挺多稀奇古怪的命令,而且命令行的设计也不怎么合理,有时候你需要加-f之类的参数,各个参数的位置可能不一致,而且加了还不一定能起到你期望的效果。各种奇怪的现象,比如"head detached",都强迫用户去了解它内部是怎么设计的。随着Git版本的更新,新的功能和命令不断地增加,后来你终于看到命令行里出现了foreach,才发现它的命令行就快变成一个(劣质的)程序语言。如果你了解ydiff的设计思想,就会发现Git之类基于文本的版本控制工具,其实属于古代的东西。然而很多人把Git奉为神圣,就因为它是Linus Torvalds设计的。

Git最让人恼火的地方并不是它用起来麻烦,而是它的“资深用户”们居高临下的态度给你造成的心理阴影。好些人因为自己“精通Git”就以为高人一等,摆出一副专家的态度。随着用户的增加,Git最初的设计越来越被发现不够用,所以一些约定俗成的规则似乎越来越多,可以写成一本书!跟Unix的传统一脉相承,Git给你很多可以把自己套牢的“机制”,到时候出了问题就怪你自己不知道。所以你就经常听有人煞有介事的说:“并不是Git允许你这么做,你就可以这么做的!Unix的哲学是不阻止傻人做傻事……” 如果你提交代码时不知道Git用户一些约定俗成的规则,就会有人嚷嚷:“rebase了再提交!” “不要push到master!” “不要merge!” “squash commits!” 如果你不会用git submodule之类的东西,有人可能还会鄙视你,说:“你应该知道这些!”

打个比方,这样的嚷嚷给人的感觉是,你得了奥运会金牌之后,把练习用的器材还回到器材保管科,结果管理员对你大吼:“这个放这边!那个放那边!懂不懂规矩啊你?” 看出来问题了吗?程序员提交了有高价值的代码(奥运金牌),结果被一些自认为Git用的很熟的人(器材保管员)厉声呵斥。

一个尊重程序员的公司文化,就应该把程序员作为运动健将,把程序员的代码放在尊贵的地位。其它的工具,都应该像器材保管科一样。我们尊重这些器材保管员,然而如果运动员们不懂你制定的器材摆放规矩,也应该表示出尊重和理解,说话应该和气有礼貌,不应该骑到他们头上。所以,对于Git的一些命令和用法,我建议大家向新手介绍时,这样开场:“你本来不该知道这些的,可是现在我们没有更好的工具,所以得这样弄一下……”

关于Git的礼节的更多相关文章

  1. git基础一

    礼节为上: 从这次的武昌砍人时间分析:一定要对别人客气一点,无论在餐厅,或者任何事情上面一定要对别人客气 即使自己遇到很烦心的事情,也要保持情绪,因为如果遇到神经病,刚好自己没有控制好自己的情绪,自己 ...

  2. Git 子模块 - submodule

    有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...

  3. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  4. Git与Repo入门

    版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...

  5. Git Bash的一些命令和配置

    查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...

  6. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net

    1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...

  7. 史上最详细git教程

    题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...

  8. [版本控制之道] Git 常用的命令总结(欢迎收藏备用)

    坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...

  9. 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解

    工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...

随机推荐

  1. Apache Spark 内存管理详解

    在spark里面,内存管理有两块组成,一部分是JVM的堆内内存(on-heap memory),这部分内存是通过spark dirver参数executor-memory以及spark.executo ...

  2. 快速接入PHP微信支付

    微信支付是微信开发中坑最多的一个功能,本文旨在帮助有开发基础的人快速接入微信支付,如果要详细了解微信支付,请看微信支付的开发文档. 再说把开发文档搬到这里来就没必要了.想要快速跑通微信支付的可以继续查 ...

  3. centos-linux热拔插scsi硬盘

    自己配置虚拟机,需要添加一块虚拟硬盘存放数据.虚拟机在更新软件,不想停机.学习了下热拔插硬盘的知识点 1. 在虚拟机中创建虚拟磁盘并添加. 2. 查看目前的磁盘信息cat /proc/scsi/scs ...

  4. 关于javascript的cookie的封装

    /******************cookie*********************/ /* cookie的组成部分: 名称:唯一值,不区分大小写,必须经过URL编码 值:必须经过URL编码 ...

  5. JavaScript函数及作用域

    知识内容: 1.JavaScript函数 2.JavaScript全局函数及特殊函数 3.JavaScript作用域 4.本节练习 参考资料:<JavaScript高级程序设计> 一.Ja ...

  6. node实现缓存

    内容: 1.缓存基本原理 2.node实现缓存 1.缓存基本原理 第一重要.缓存策略: cache-control:用于控制缓存,常见的取值有private.no-cache.max-age.must ...

  7. vb shell函数在c#的转换

    vb shell: Private Sub AddBarcodeImages(ByVal DTab As DataTable) If Not DTab Is Nothing Then DTab.Col ...

  8. vb 水晶报表打印

    vb里面的水晶报表打印控件:CrystalReportViewer 用到的dll文件: 水晶报表打印其实很简单,只要创建报表对象,再对其传递数据就可以打印出来.当然所传递的数据要与水晶报表设计里面的数 ...

  9. 〈Android 群英传-神兵利器〉第7章一个的寂寞与一群人的狂欢

    |---第7章一个的寂寞与一群人的狂欢 |---7.1如何解决问题 |---Chrome浏览器 |---Chrome开发者工具 |---Chrome插件(Json-Handle:Json格式化查看工具 ...

  10. django-mysql表的增删改查

    1.增加数据 调用该路由执行ModelsCaozuo的处理方法 第一种实例化类 class ModelsCaozuo(View): ''' 数据库增加数据 ''' def get(self, requ ...