這件事情應該要從 FreeBSD 6 左右的 make build world && make install world 開始說起。每次 build world 以後,新版的 tool chain 設定檔可能都會有小部份的更新,可能是多幾個功能可以設定,或是把一些舊的功能拔掉,這時 install world 時為了擔心使用者改過的 config 檔直接被覆蓋掉,都會先做一次 diff 讓使用者確定設定檔更新以後不後搞垮系統。但有半數以上的 diff,均為 config 中開發人員的註解,像是「2005/xx/xx 最後更新」之類的,單單處理這類的 diff 就可以耗掉數十分鐘。
現在大家在寫程式時,應該都有習慣將 source code 放進 version control system (VCS) 中,方便做版本管理以及除錯。VCS 除了能夠協助開發者幫不同的修改留下記錄以外,也支援版本之間的比較、建立補丁 (patch) 等功能,讓開發者可以專心在功能的開發上。
既然 VCS 已經協助開發者記錄了這麼多東西,那有哪些是開發者已經不需要寫在 source code 裡面的呢?
- 日期:大多數的 VCS 在開發者 commit 時就會記錄日期,開發者有修改時不必特別在程式中註解修改日期,只要 commit 時將 commit message 寫好讓其他人看得到、搜尋的到即可。
- 作者:每個開發人員在 VCS 都會被視為不同的 commitor,所以哪個 commit 是誰送、甚至哪一行是誰修改的都有記錄。把修改原因寫清楚比較重要。
- 註解掉不使用的程式碼:因為 VCS 會保留從古到今所有的程式碼異動,所以大可不用擔心程式碼刪除以後無法還原,若發現某一段程式已經不再使用了,就放心的把他刪掉吧,萬一誤砍了還是可以透過 VCS 復原回來。(如果 VCS 做不到這個功能就換一個吧 XD)
- 與專案無關的 binary:大多數 icons、font、design files 都會與專案的版本一起演進,放進 VCS 是應該的。但與專案週期不同、或為一次性用途的 binary 檔案,如週年慶的活動圖片設計、影片等,就不適合放進 VCS,若真的有版本管理需要,應該另外開一個 repository。
- symbolic link:恩 …. 有事嗎?