習慣版本控制後寫程式會大膽許多,反正比對修改之處很簡單,復原到特定版本也只是舉手之勞。不過這僅限於納入追蹤控管的內容。大部份的版本控制系統能控管的項目還是有限 (我沒用過商業版,不曉得有沒有比較厲害),例如目錄與更名 (rename) 的控管。
有時在開發初期隨手寫幾個測試用的程式,隨後越來越龐大後開始整理並組織現有的程式碼,先不管開發流程的好壞,應該很多人都有類似經驗。不過若是一開始有導入版本控管,接下來就是頭大的問題了。以 cvs 來說,檔案一改名字或改路徑 (整理到特定目錄),history 就會中斷,日後要 diff
也不容易。
後起之秀 svn 雖然可以記錄 snapshot,checkout
特定版本不會掉檔案,印象中一樣不會有 rename 的記錄,只能人眼觀察前後幾個 revision 的檔案變化,但總是比 cvs 方便多了。
Wikipedia 上有一張 比較表 ,其中就包含 rename 項目。我目前有在使用的 svn、hg 和 git 都有支援 rename,但只有 hg 和 git 的記錄上看得到 reanme 的資訊 (svn 很久沒用了,要再確認看看)。rename 時需要用內建指令才會加入記錄:(-n 為測試指令用,不會真的執行動作)
$ hg -v mv -n a.c b.c
copying a.c to b.c
removing a.c
或是
$ git mv -n a.c b.c
Checking rename of ‘a.c’ to ‘b.c’
Renaming a.c to b.c
Adding : b.c
Deleting : a.c
同時,在 hgk 或 gitk 中也看得到這些資訊。
更名以後如果要透過 diff
比對修改處,一般看到的是完全刪除 a.c
,並加入新的 b.c
,如果想追蹤實際內容變更,則需要加上一些選項:
$ hg diff -g -r REV
或是
$ git diff -M REV
除了命令列的方式,也可以在 hgk 或 gitk 中透過選單的方式來檢視這些變更。
svk 還沒機會試用,但光是看到在 debian 上安裝還得額外裝上 33 個 perl module…我還是先用 hg 和 git 吧。
Leave a comment