(这里的内容原本是《怎样尊重一个程序员》的一小节,但因为Git的使用引发了很广泛的不尊重程序员的现象,如今特别将这一节提出来单独成文。)git
Git是如今最流行的代码版本控制工具。用外行话说,Git就是一个代码的“仓库”或者“保管”,这样不少人修改了代码以后,能够知道是谁改了哪一块。其实无论什么工具,不论是编辑器,程序语言,仍是版本控制工具,比起程序员的核心思想来,都是次要的东西,都是起辅助做用的。但是Git这工具彷佛特别惹人恼火。程序员
Git并不像不少人吹嘘的那么好用,其中有明显的蹩脚设计。跟Unix的传统一脉相承,Git没有一个良好的包装,设计者把本身的内部实现细节无情地泄露给了用户,让用户须要琢磨者设计者内部到底怎么实现的,不然不少时候不知道该怎么办。用户被迫须要记住挺多稀奇古怪的命令,并且命令行的设计也不怎么合理,有时候你须要加-f之类的参数,各个参数的位置可能不一致,并且加了还不必定能起到你指望的效果。各类奇怪的现象,好比"head detached",都强迫用户去了解它内部是怎么设计的。随着Git版本的更新,新的功能和命令不断地增长,后来你终于看到命令行里出现了foreach,才发现它的命令行就快变成一个(劣质的)程序语言。若是你了解ydiff的设计思想,就会发现Git之类基于文本的版本控制工具,其实属于古代的东西。然而不少人把Git奉为神圣,就由于它是Linus Torvalds设计的。github
Git最让人恼火的地方并非它用起来麻烦,而是它的“资深用户”们居高临下的态度给你形成的心理阴影。好些人由于本身“精通Git”就觉得高人一等,摆出一副专家的态度。随着用户的增长,Git最初的设计愈来愈被发现不够用,因此一些约定俗成的规则彷佛愈来愈多,能够写成一本书!跟Unix的传统一脉相承,Git给你不少能够把本身套牢的“机制”,到时候出了问题就怪你本身不知道。因此你就常常听有人煞有介事的说:“并非Git容许你这么作,你就能够这么作的!Unix的哲学是不阻止傻人作傻事……” 若是你提交代码时不知道Git用户一些约定俗成的规则,就会有人嚷嚷:“rebase了再提交!” “不要push到master!” “不要merge!” “squash commits!” 若是你不会用git submodule之类的东西,有人可能还会鄙视你,说:“你应该知道这些!”编辑器
打个比方,这样的嚷嚷给人的感受是,你得了奥运会金牌以后,把练习用的器材还回到器材保管科,结果管理员对你大吼:“这个放这边!那个放那边!懂不懂规矩啊你?” 看出来问题了吗?程序员提交了有高价值的代码(奥运金牌),结果被一些自认为Git用的很熟的人(器材保管员)厉声呵斥。工具
一个尊重程序员的公司文化,就应该把程序员做为运动健将,把程序员的代码放在尊贵的地位。其它的工具,都应该像器材保管科同样。咱们尊重这些器材保管员,然而若是运动员们不懂你制定的器材摆放规矩,也应该表示出尊重和理解,说话应该和睦有礼貌,不该该骑到他们头上。因此,对于Git的一些命令和用法,我建议你们向新手介绍时,这样开场:“你原本不应知道这些的,但是如今咱们没有更好的工具,因此得这样弄一下……”命令行