简单总结一下 Git 的使用

前段时间折腾Moodle的Quesion/Quiz模块,最大的难点不是开发,而是怎么跟另一个维护该模块的同事讨论,这哥们远在大不列颠,每次在tracker上留言都不得不等到第二天起床才能看到他的回复,更烦的是要review一个个patch,小点还好说,这动辄一万多行的大patch真不好一行行的解释。

然后决定把战线延伸到GitHub。对小项目来说Git相对CVS的优势不明显,徒增学习曲线,但对于Moodle这种庞大的开源软件,Git却是大大降低复杂程度,最重要的一点是创建分支的成本为零,我可以单独创建新分支以开发某特性,开发过程中可以方便的与上游代码合并,之前的cvs是无法享受这种便利的,我们不得不checkout多份拷贝进行测试。另一个很重要的特点是Git在本地保存全部改动历史,这样可以极其快捷的进行diff和blame :-)

再说说GitHub,对于项目管理来说,GitHub肯定是不如Jira,但细化到编码这个层次,GitHub比Jira好很多,首先Jira没有官方的Git支持,无法追踪相关的Git提交,然后Jira不便于Code review(可能有好的插件会支持,说错了请指正)。GitHub在这方面做的很好,可以在git commit做inline note,代码浏览比viewvc强出一个世纪。

转到GitHub后,工作效率提高了很多,我白天把改动push到我的在GitHub的分支上,然后同事做Code review,提交改动,第二天我把他的改动合并到我的分支上,然后继续昨天的工作……

Git实际上是个新的开发模型,从编码到项目管理都不同于cvs时代。

简单总结一下Git的使用以 Moodle在GitHub的mirror为例。

  1. 打开 http://github.com/moodle/moodle,然后Fork,这个并不是必须的,之后可以通过git remote添加新的上游代码库
  2. git clone 我自己的代码库
  3. 我不喜欢origin这个默认远程代码库名,所以重命名一下:git remote rename origin github,运行一下 git branch -r 发现远程名字变了
  4. 我之前fork的Moodle并不是官方的,换成官方的git源:git remote add upstream git://git.moodle.org/moodle.git,然后:git fetch upstream
  5. 我要创建一个我自己的分支newfeature:git branch newfeature,切换到这个分支需运行:git checkout newfeature
  6. 这个时候newfeature是个本地分支,在github上是不存在的,我得把这个分支push到github上,同事才能看到我的改动,运行:git push github,打开.git/config
    [branch "newfeature"]
    remote = github
    merge = refs/heads/newfeature
    

    如果没有就加上这段,有了这段,就可以git pull直接获取并合并,有个命令可以设置git checkout –track github/newfeature,但我觉的用配置文件更直观

  7. 如果上游更新了,我就需要合并:git merge upstream/cvshead
  8. 删除本地分支:git branch -d newfeature,删除远程分支:git push :newfeature
  9. 一般的提交就不多说了,跟cvs之流一样,不同的是提交完了要git push才能把你的改动推送到远程服务器上
  10. git可以比较分支,这样你可以比较你的当前分支和主干,生成一个patch提交到cvs里

在 ~/.gitconfig 上下点功夫,能提高工作效率,Stack overflow上有个讨论不错:What does your ~/.gitconfig contain?

最后推荐两个软件,GitX和tig,两个都是Git浏览器,前者是Mac的,后者是终端上的,对于常用ssh的人,后者有用,有效率的多。

免费DNS Hosting

买了一个 com.au 的域名,登入一看,竟然连CNAME和MX记录都不能创建,非用不可的话就得买他的 web hosting 服务,然后“免费”提供。这好像去饭店吃饭不给你筷子,问他要说您必须再点一盘菜,然后我们送你一套餐具,这不就是敲诈吗?

还好能改DNS服务器地址,心想自己搭一个Bind吧,看了下那砣另类的zone文件,改主意了,弄不好就得折腾上一天。

想起DNSPod好像是干这事的,但注册一下又是邀请码又是
VIP的,还是算了吧,找到其它两个免费DNS hosting网站分享一下:

配置很简单,在你域名供应商的网站里把DNS服务器改成新的DNS服务器地址,然后再做域名记录添改即可。