從某種程度上來講,版本控制是現代大規模團隊合作軟體開發的一個基石。如果沒有版本控制,很難想象現在的軟體開發會是一個什麼樣子。
現在用的較多的就是SVN了 。很多人 最開始接觸SVN的時候總是希望能通過看文件幫助什麼的來學習,最終會發現還是啥也不會。其實SVN這種東西還是在實踐中學習的快,如果僅僅是看文件,可能根本就無法體會到SVN的精髓所在。
SVN一般有一個 SVN中心伺服器,網上現在有很多SVN伺服器的搭建幫助,這個不會有太多的麻煩。有了SVN伺服器,我們就可以來提交程式碼了。
凡是使用SVN來管理的專案,一般都有一個trunk和若干branch。
當我們需要對專案進行修改的時候,首先從trunk主幹程式碼上打出一個分支,放到branch下面。然後開發人員就可以在分支程式碼上面折騰了。下面列舉了一些可能遇到的情形和處理方法:
1, 開發者A和B都在分支上修改了程式碼,此時commit之前最好先update一下,以便保證其他人commit的程式碼在本地正確獲取到。
2, 若A和B都修改了同一個檔案,則會觸發Merge操作,SVN會根據程式碼中被修改的行來合併。但是有一個例外就是:若A和B修改的是同一行,則此時就會產生衝突,對於衝突,我們只能手動解決(手動合併)。合併完後,還必須通過SVN設定衝突已解決,否則程式碼會一直處於衝突狀態。
3, 程式碼測試通過,合併到主幹上,此時也可能產生衝突(同問題2)。我們仍然按照上面的方法解決即可。
4, 有的時候我們需要比較兩個Revison之間的差別,這個可以使用svn的diff子命令,例如svn diff –r 1000:1001 ,比較1000和1001這兩個版本的差別,其中,我們一般將較新的版本放在後面,舊版本放在前面(反過來的話也可以,不過比較結果就是以新版本為基線了)。
5, 有的時候我們需要一個不含SVN資訊的“乾淨“程式碼,這時候可以使用svn export 子命令,輸出一個不帶版本控制資訊的程式碼拷貝。
6, 檢視SVN提交記錄,可以使用svn log子命令。若要檢視尚未提交但是有變更的檔案,可以使用svn status。這個命令會顯示當前程式碼庫中所有有變更的檔案以及尚未加入版本控制的檔案。如果我們後悔了某一個修改(如誤操作了),則使用revert子命令進行撤銷。
7, 當我們進行了SVN相關的提交或者更新操作後,往往狀態不能馬上同步過來,特別是非常大的專案,有的時候等了很久也沒用。這時可以使用svn cleanup來強制性進行狀態清理。
以上是使用中經常遇到的情形。一般來說這些足夠用了。當然SVN還有一些其他的功能,但一般不是很常用。這裡就不一一列舉。
SVN的一個強大之處在於它幾乎可以用於所有的系統平臺。特別是在Windows平臺上,有強大的圖形化工具(Tortoise SVN)可用。另外一點它能方便的同常用開發環境進行結合,Eclipse就不用說了。重點說下Visual Studio,微軟官方並沒有VS的SVN外掛,不過幸好目前已經有人開發了,名為AnkhSVN,這個東西我正在用,應該來說還是比較強大的。