我痛恨 Git 的 10 个理由

Git 是一个源代码版本控制系统,正在迅速成为开源项目的标准。它有一个强大的分布式模型,允许高级用户用分支来处理各种棘手的问题和改写历史记录。但是,要学习 Git 是需要付出更多的努力,让人不爽的命令行接口以及 Git 是如此的忽视它的使用者。

下面是我为什么如此痛恨 Git 的 10 个理由:

1. 复杂的信息模型

Git 的信息模型是很复杂的,而且你必须对他们都很了解。在这个方面上你看看 Subversion:有文件、工作目录、资源库、版本、分支和标签。你需要了解的就是这些东西,实际上,分支、标签和文件你已经了解,但如果使用 Git ,你拥有更多的概念需要了解:文件、工作树、索引、本地资源库、远程资源库、远程、提交、treeishes、分支和 stash。你需要了解比 Subversion 更多得多的知识点。

2. 让人抓狂的命令行语法

Git 的命令行语法完全是随意的而且不一致,例如 git pull 基本上跟 git merge 和 git fetch 一样,git branch 和 git checkout 合并就变成 git checkout -b,git reset 命令的不同参数做的事情完全不一样,指定文件名后命令的语义完全不同等等。

而最为壮观的就是 git am 命令了,据我所知,这是因为 Linus 在当年某个晚上为了解决通过电子邮件阅读补丁而使用的不同的补丁语法,特别是在邮件的标题上。

3. 蹩脚、让人费解的文档

说起 Git 的这个文档,我唯一想说的就是“操”。他们是为计算机科学家在写文档,而不是用户。在这里举个例子:

git-push – Update remote refs along with associated objects

如果是针对用户而言,应该描述为:

git-push – Upload changes from your local repository into a remote repository

另外一个例子:

git-rebase – Forward-port local commits to the updated upstream head

翻译: git-rebase – Sequentially regenerate a series of commits so they can be applied directly to the head node

4. 信息模型的扩散

刚才我在第一点提到的 Git 的信息模型是非常复杂的,而且还想癌细胞一样一直在扩散,当然一直在使用 Git ,就会不断的冒出各种新的概念,例如 refs, tags, the reflog, fast-forward commits, detached head state (!), remote branches, tracking, namespaces 之类的。

5. 漏洞百出的抽象

Git 包含太多不是抽象的抽象,在定义用户接口和实现上经常没有任何区别,这是可以理解的,对一个高级用户来说他需要了解一些功能的具体实现,以掌握各个命令的微妙之处。但大量的内部细节对初学者来说简直是噩梦。有这么一个说法,关于水暖器材和瓷器,但你必须成为一个水暖工才能知道器材如何安装在瓷器上。

很多人对我的抱怨予以回应说:你无需使用所有的命令,你可以向 Subversion 一样来使用 Git。这是狡辩,就好比是告诉一个老奶奶说高速公路并不可怕,她可以在高速路上靠左边的快车道上以时速 20 公里爬行,一样的道理。Git 并没有提供任何有用的子集,每个命令都会连带着对其他命令的要求,很简单的动作经常需要很复杂的动作来撤销或者改进。

下面是一个 Github 项目维护者的一些善意的建议:

  1. 在分支和 master 上寻找合并的基准: ‘git merge-base master yourbranch’
  2. 假设你已经提交了更改记录,从对你的提交重新基准化到合并准,然后创建一个新分支
  3. git rebase –onto <basecommit> HEAD~1 HEAD
  4. git checkout -b my-new-branch
  5. 检出你的 ruggedisation 分支,然后移除提交: ‘git reset –hard HEAD~1′
  6. 合并新的分支到 ruggedisation: ‘git merge my-new-branch’
  7. 检出 master (‘git checkout master’), 合并新分支 (‘git merge my-new-branch’), 然后检查合并后的情况,接着移除合并 (‘git reset –hard HEAD~1′).
  8. 提交新的分支 (‘git push origin my-new-branch’) 并记录 pull 请求

翻译:“奶奶,在高速公路上开车很容易的。松开离合器,让转速超过 6000 转使车轮打滑,然后进入第一个弯道并上高速公路,看路牌到出口前,使用手刹漂移转向出口。

6. 维护简单,但是提交麻烦

Git 很强大的一点就是代码基准库的维护,你必须合并来自大量不同源的提交,非常适合大规模并行开发。但是这些都不是为大多数 Git 的用户设计的,他们只是需要编写代码,可能好几个月都在同一个分支上,对他们来说 Git 是带有 4 个手柄的双锅的咖啡机,但用户只想立即喝到咖啡。

有趣的是,我并不认为这是 Git 在设计中做的权衡。它完全是忽视了真正的用户需求、混淆架构和接口。如果你是一个架构师,那么 Git 是很棒的。但对用户来说它很糟糕,已经有不少人在为 Git 编写一些简化的接口,例如 easygit。

7. 不安全的版本控制

作为一个版本控制系统而言,它必须承诺的就是:一旦代码提交到系统,那么我将保证代码的安全,你做的任何改动你都可以找回。而 Git 食言了,有很多方法可以让整个资料库完全崩溃而且不可恢复:

  1. git add . / … / git push -f origin master
  2. git push origin +master
  3. git rebase -i <some commit that has already been pushed and worked from> / git push

8. 将版本控制库维护者的责任移给贡献者

在传统的开源项目中,只需要一个人负责处理分支和合并这样复杂的操作,那就是维护者。而其他人只需要简单的更新提交、更新提交、不断的更新提交。而现在 Git 让每个用户都需要了解作为维护者才需要知道的各种操作,烦不胜烦。而维护者呢,无所事事,翘起二郎腿喝咖啡。

9. Git 的历史是一堆谎言

开发工作主要的产出就是源代码,一个维护良好的代码历史就对一个产品来说非常的重要,关于重新基准化有很多的争论,多数是依赖于对凌乱合并和不可读的日子的审美判断。而重新基准化为开发者提供一个“干净整洁”的却毫无用途历史记录,而实际上正确的解决方法是更好的日志输出以及对不想要的合并进行过滤。

10. 简单任务也要诸多命令

如果你在开发一个开源项目,你做了一些改变,然后想与其他人分享,你只需要:

  1. 修改代码
  2. 执行 svn commit

如果你增加了一些新文件:

  1. 添加文件
  2. svn add
  3. svn commit

如果你的项目托管在 Github 类的网站中,那么你需要:

  1. Make some changes
  2. git add [not to be confused with svn add]
  3. git commit
  4. git push
  5. 到此为止,你的更改只完成了一半,接下来你需要登录到 Github,查找你的提交,然后发布一个 “pull request” ,这样其他人才可以获取你的改动

在现实中,Github 的维护者希望你的改动是功能方面的分支,他们会要求你这样操作:

  1. git checkout master [to make sure each new feature starts from the baseline]
  2. git checkout -b newfeature
  3. Make some changes
  4. git add [not to be confused with svn add]
  5. git commit
  6. git push
  7. 然后登录到 Github,切换到你的新特性分支,发布 “pull request”

为了将你的更改从你的本地目录中移到实际的项目资源库,你需要:add, commit, push, “click pull request”, pull, merge, push.

下面是一个流程图向你展示一个典型的开发者在 Subversion 上要做的工作:

“Bread and butter” 是与远程 SVN 资料库操作的命令和概念。

然后我们再来看看如果你的项目托管在 Github 上会是怎样的:

如果 Git 的强大之处是分支和合并,那么它的弱点就是让简单的任务变得非常复杂。

本文由 OSCHINA 翻译自:10 things I hate about Git ,转载请注明:

文章出处:我痛恨 Git 的 10 个理由

维基百科已经彻底告别GoDaddy

由于GoDaddy支持SOPA法案的观点引发了担忧,数月前这一全球最大的百科全书,也是最大网站之一的维基百科宣布将把所有域名移出GoDaddy的管辖,这一行动引发了不少用户的跟风,对于GoDaddy来说,支持SOPA的代价不可谓不惨烈,虽然GoDaddy之后发布了一份比较缓和的声明来挽留用户,但现在看上去为时已晚。

今天,维基媒体基金会发布公告称,法务部门在审议了GoDaddy的举动后认为该公司并不是最适合托管他们域名的一间企业,从2011年12月开始,维基百科就一直在寻找其它的域名管理机构。

维基百科已经将所有域名转向MarkMonitor,这是一个总部设在旧金山的域名服务商,维基百科将在这里实现巩固和集中管理,新的公司也将关注有关域的安全功能。

Galaxy S II 明日起可以升级到 Android 4.0系统

三星 Galaxy S II 的升级时间终于确定—3月10日,也就是明天。

Galaxy S II的国际版本将会在明天率先得到升级,其它版本的升级时间可能会迟一些。据悉,这次升级需要三星的Kies 2.0套件才能完成。

升级完成后,Galaxy S II将获得众多特性和功能,包括人脸识别解锁、流量统计、多任务操作和三星的Touchwiz用户界面,不过Flash和蓝牙3.0将不再得到支持。

Google 的二进制和十六进制搜索彩蛋

Google的搜索结果经常搞一些卖萌的小彩蛋,最近在GTricks的Google Fans Community论坛里又有人发现了新彩蛋。当你搜索Hexadecimal(十六进制)或Binary(二进制)的时候,Google会用相应的十六进制和二进制来告诉你找到了多少搜索结果(如上图)。

聪明的你可以算出0b1101111011000111010000000和0xfbc520分别代表十进制里的多少吗?

谷奥 Via GTricks

现在就开始使用HTML5的十大原因

本文转载自GBin1.com

你难道还没有考虑使用HTML5? 当然我猜想你可能有自己的原因;它现在还没有被广泛的支持,在IE中不好使,或者你就是喜欢写比较严格的XHTML代码。HTML5是web开发世界的一 次重大的改变,事实上不管你是否喜欢,它都是代表着未来趋势。其实HTML5并不难理解和使用。我们这里能列出许多原因为什么现在要开始使用HTML5。

目前有很多的文章介绍使用HTML5并且介绍了使用它的优势和好处,没错,我们这篇文章也类似。随着更多这样的文章,以及Apple的支持, Adobe围绕HTML5的产品开发,以及移动flash的死亡,如此多网站的支持,我想对那些仍旧没有或者不想接受它的人说一些话。我认为主要得原因是,它看起来像一个神秘的东西。很多感觉它像喷气背包或者飞行汽车。一个未经验证的非凡想法但是并不实际。但是事实上现在已近非常的实际了。

为了解密HTML5并且帮助顽固的开发设计人员,我这里写了列出了使用HTML5的几大原因,希望对大家有帮助!

第十大原因:易用性

强烈推荐:现在就开始使用HTML5的十大原因

俩个原因使得使用HTML5创建网站更加简单:语义上及其ARIA。新的HTML标签像<header>, <footer>,<nav>,<section>, <aside>等等,使得阅读者更加容易去访问内容。在以前,即使你定义了class或者ID你的阅读者也没有办法去了解给出的一个div究 竟是什么。使用新的语义学的定义标签,你可以更好的了解HTML文档,并且创建一个更好的使用体验。

ARIA是一个W3C的标准主要用来对HTML文章中的元素指定“角色“,通过角色属性来创建重要的页面地形例 如,header,footer,navigation或者aritcle很有必要。这一点曾经被忽略掉了并且没有被广泛使用,因为事实上并不验证。然 而,HTML5将会验证这样属性。同时,HTML5将会内建这些角色并且无法不覆盖。更多的HTML5和ARIA讨论,请大家查看这里

第九大原因:视频和音频支持

忘了flash和其它第三方应用吧,让你的视频和音频通过HTML5标签<video>和<audio>来访问资源。正确 播放媒体一直都是一个非常可怕的事情,你需要使用<embed>和<object>标签,并且为了它们能正确播放必须赋予一大堆 的参数。你的媒体标签将会非常复杂,大堆得令人迷惑的代码。而且HTML5视频和音频标签基本将他们视为图片:<video src=”"/>。但是其它参数例如宽度和高度或者自动播放呢?不必担心,只需要像其它HTML标签一样定义:<video src=”url” width=”640px” height=”380px” autoplay/>。

实际上这个过程非常简单,然而我们的老浏览器可能并不喜欢我们的HTML5,你需要添加更多代码来让他们正确工作。但是这个代码还是比<embed>和<object>来的简单的多。

第八大原因:Doctype

没错,就是doctype,没有更多内容了。是不是非常简答?不需要拷贝粘贴一堆无法理解的代码,也没有多余的head标签。最大的好消息在于,除了简单,它能在每一个浏览器中正常工作即使是名声狼藉的IE6。

强烈推荐:现在就开始使用HTML5的十大原因

第七大原因:更清晰的代码

如果你对于简答,优雅,容易阅读的代码有所偏好的话,HTML5绝对是一个为你量身定做的东西。HTML5允许你写出简单清晰富于描述的代码。符合语义学的代码允许你分开样式和内容。看看这个典型的简单拥有导航的heaer代码:

<div id="header"> <h1>Header Text</h1> <div id="nav">  <ul>   <li><a href="#">Link</a></li>   <li><a href="#">Link</a></li>   <li><a href="#">Link</a></li>  </ul> </div></div>

是不是很简单?但是使用HTML5后会使得代码更加简单并且富有含义:

<header> <h1>Header Text</h1> <nav>  <ul>   <li><a href="#">Link</a></li>   <li><a href="#">Link</a></li>   <li><a href="#">Link</a></li>  </ul> </nav></header>

使用HTML5你可以通过使用语义学的HTML header标签描述内容来最后解决你的div及其class定义问题。 以前你需要大量的使用div来定义每一个页面内容区域,但是使用新 的<section>,<article>,<header>,<footer>,<aside> 和<nav>标签,需要你让你的代码更加清晰易于阅读。

第六大原因:更聪明的存储

强烈推荐:现在就开始使用HTML5的十大原因

HTML5中最酷的特性就是本地存储。有一点像比较老的技术cookie和客户端数据库的融合。它比cooke更好用因为支持多个windows存储,它拥有更好的安全和性能,即使浏览器关闭后也可以保存。

因为它是个客户端的数据库,你不用担心用户删除任何cookie,并且所有主流浏览器都支持。

本地存储对于很多情况来说都不错, 它是HTML5工具中一个不需要第三方插件实现的。能够保存数据到用户的浏览器中意味你可以简单的创建一些应用特性例如:保存用户信息,缓存数据,加载用户上一次的应用状态。

第五大原因:更好的互动

我们都喜欢更好的互动,我们都喜欢对于用户有反馈的动态网站,用户可以享受互动的过程。输入<canvas>,HTML5的画图标签允许你做更多的互动和动画,就像我们使用Flash达到的效果。

除了<canvas>,HTML5同样也拥有很多API允许你创建更加好的用户体验并且更加动态的web应用程序。 这里有一个列表:

  • Drag and Drop (DnD)
  • Offline storage database
  • Browser history management
  • document editing
  • Timed media playback

第四大原因:游戏开发

没错, 你可以使用HTML5的<canvas>开发游戏。HTML5提供了一个非常伟大的,移动友好的方式去开发有趣互动的游戏。如果你开发Flash游戏,你就会喜欢上HTML5的游戏开发。

Script-tutorials目前提供了4个不部分的HTML5游戏开发教程,这里看看他们开发的有趣游戏:

第三大原因: 遗留及其跨浏览器支持

强烈推荐:现在就开始使用HTML5的十大原因

你的现代流行浏览器都支持HTML5(Chrome,Firefox,Safari,IE9和Opera),并且创建了HTML5 doctype这样所有的浏览器,即使非常老非常令人厌恶浏览器像IE6都可以使用。但是因为老的浏览器能够识别doctype并不意味它可以处理 HTML5标签和功能。幸运的是,HTML5已经使得开发更加简单了,更多支持更多浏览器,这样老的IE浏览器可以通过添加javascript代码来使 用新的元素:

<!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

第二大原因: 移动,移动还是移动

你可以称之为“直觉”,但是我认为移动技术将会变得更加的流行。我知道,这里有些非常疯狂的猜测,有些可能你也想到了 – Mobile是一个时尚!移动设备将占领世界。更多的接受移动设备将会增长的非常迅速。这意味着更多的用户会选择使用移动设备访问网站或者web应用。 HTML5是最移动化的开发工具。随着Adobe宣布放弃移动flash开发,你将会考虑使用HTML5来开发webp应用。

当手机浏览器完全支持HTML5那么开发移动项目将会和设计更小的触摸显示一样简单。这里有很多的meta标签允许你优化移动:

  • viewport: 允许你定义viewport宽度和缩放设置;
  • 全屏浏览器: ISO指定的数值允许Apple设备全屏模式显示;
  • Home screen icons:  就像桌面收藏,这些图标可以用来添加收藏到IOS和Android移动设备的首页。

第一大原因: 它是未来,开始用吧!

最大的原因今天你就开始使用HTML5是因为它是未来,不要掉队了!HTML5不会往每个方向发展,但是更多的元素已经被很多公司采用,并且开始着 手开发。HTML5其实更像HTML,它不是一个新的技术需要你重新学习!如果你开发XHTML strict的话你现在就已经在开发HTML5了。为什么不更完整的享受HTML5的功能呢?

你实际上没有任何借口不接受HTML5。事实上我唯一一个原因使用HTML5是因为它书写代码简单清晰。其它的特性其实我也没有真正使用。你可以考 虑现在开始使用HTML5书写代码,它能帮助你改变书写代码的方式及其设计方式。开始用HTML5代码编写web应用吧,说不定下一个移动应用或者游戏应 用就是用HTML5开发的!