2008年6月3日 星期二

Subversion

好不容易公司的專案告一段落, 又開始我的網路fool around, 不過這次還真的是找到有用的東西...

由於程式設計生涯常常會遇到程式版本的問題, 比如說改東改西, 改到爛掉, 某些版本有新功能, 有些則沒有...一個人寫的時候還好, 我都是在做愚蠢的事之前, 先用WinRAR備份整個專案目錄, 然後才進行修改...之前備份用的檔名都是檔名加date code, 可是在尋找舊版本時, 看到一堆包含date code的檔名, 瞬時就頭昏眼花...後來只好捨棄date code, 改為在做新的變更時, 先把舊的備份檔名後面多加上'-', 然後才備份, 這樣一來, 最新版本的前一次備份就是後面沒加上'-'的備份檔案, 而愈舊的檔案後面的'-'愈多, 如果需要日期, 只要看檔案建立時間就好, 多虧了檔案總管的排序功能, 可以很快的找到某個版本的備份, 看起來就像這樣...



不過這樣也有問題, 當後面的'-'太多的時候, 光是改檔名就改到手軟..所以每隔一段時間就得砍掉太早版本的備份, 這麼多年下來, 這方法也沿用至今, 不過在專案是二人以上合作的時候, 這樣的版本控制就相當的麻煩...

為了解決這個問題, 之前很幸運的找到一款軟體 WinMerge, 這是一款可以比較二個目錄下的檔案, 並列出不同的地方, 然後你可以直接用WinMerge進行二個檔案的合併...不過麻煩的就是, 總是要"人"來做、來分析程式碼中哪些是要合併的, 哪些是冗碼, 如果忘了自己修改過的部份, 又直接拿同事的版本來用, 最後發現自己寫的部份不見了, 又得從備份還原, 不僅勞民傷財, 最慘的是, 等到不知道第幾個'---'之後才發現, 那才真是愈哭無淚~~

雖然目前我一個人做專案, 但哪天與別人合作時, 便必須有個機制讓雙方可以隨時向對方提供更新程式碼, 而不會再丟三落四...這時我又想到了開放原始碼界常用的CVS, 之前我對它是非常排斥的, 因為很麻煩的要記指令, 不過在沒多餘的錢買其他版本控制軟體的情況下, 還是搜尋了一下CVS, 不過CVS好像沒有Windows版本的, 而Wiki告訴我, 號稱可以從CVS無痛轉換的SVN有, 那就趕緊來試用看看囉!!

祭出了VMware, 在虛擬的XP下安裝了SVN之後, 便隨便拿出一個專案來惡搞(當然是有備份囉)...雖然還是必須下指令, 不過說明訊息竟然是中文的呢!!先利用svnadmin建立資源庫, 並將專案用svn import之後, 再進行checkout便可以開始使用了(有點小麻煩~~), 不過我只有先用本機的資源庫進行版本控制的測試, 還沒用到最終的應用WebDAV, 有空再來試試~~

之後進行模擬二地同時進行修改, 某方先更新版本之後, 另一方要更新版本時就會出現禁止更新, 除非先做update...svn在update時便會將對方寫的部份合併到自己的工作副本中, 同時也保存了自己改寫的部份, 如果二人都對同一行程式碼進行修改, 就會產生衝突, 這時還是要人的介入與協調來決定最正確的方式, 解決衝突之後便可利用svn commit送出變更, 這時版本就會一次一次的加上去...如果想知道每次版本的變更情況, 也可以利用指令取得版本間的差異, 真是相當好用!!沒想到我真是白混了, 這麼好用的東西沒早點導入~~

如果不喜歡下指令, 還有好用的svn gui軟體, TortoiseSVN, 是svn的client端軟體, 不用說, 二者產生的資源庫是可以共用的, 同時也有中文化的patch, 有興趣的可以看看哦~~

沒有留言:

張貼留言