2012年7月3日 星期二

導讀:保持小而頻繁的 commit

今天讀到這篇文章 http://fcamel-life.blogspot.tw/2010/08/commit.html

這篇文章在講使用分散式版本控制系統 (DVCS) 時應該儘量保持小而頻繁的 commit 行為,我覺得值得一讀。

雖然作者使用的是 mercurial (hg),但其實跟 git 的觀念是很像的。

以下簡單導讀:
第一部分介紹這個做法的好處,像是可以很容易做 code review (就算是自己 review 自己的 code 也一樣容易)、容易知道現在做了那些修改 (使用 git diff 一目了然)。他還提到用二元搜尋法找到出錯的程式,可透過 git bisect 完成。而他有用到的 hg shelve 跟 hg revert 在 git 也都有對應的功能 (git stash 跟 git revert),前者是用來把目前 working copy 的修改「暫存」起來 (非 commit),之後可以再取出來繼續把它改完,後者則是可以還原特定 commit 的變更。也就是說,配合 revert,如果每個 commit 都很小的話,可以很輕鬆把特定修改還原。

第二部分講 DVCS 的好處,很重要的就是每個人可以自己搞自己的,又可以知道別人的脈絡。如果是在一人專案的狀況下,最基本上也可以省去跟遠端主機溝通的成本。但 DVCS 也有缺點,就是對於無法 merge (或根本不須 merge) 的檔案無法很好的處理。

後面部分,關於暫存的部分上面提過了,主要就是 git stash。而 hunk selection 在 git 中可用 git add -p 或是 git add -i (interactive) 做到,如果不小心一次寫了太多功能,可以利用這種方式分別 commit,才能保持 commit 小而頻繁,以獲得好處。

最後一個部分,列了幾個常見的無趣但重要的工作,偏重構方面的。作者建議把這些工作各自獨立成單一的 commit,而事實上這樣真的有很大的好處,看 log 跟 diff 的時候可以少花很多心思。

沒有留言:

張貼留言