是前面公司開始使用svn時候的培訓時候準備的資料,發出來,希望對使用svn的兄弟們有所幫助。里面的相關軟件版本可能已經不夠新了,但新的軟件的大概操作方式也基本是相通的,同時,SVN的基礎概念也沒有發生過變化。
第一部分:基礎使用
工具安裝:
1. Subclipse ,Eclipse的Svn插件。安裝、使用都很簡單。當前最高版本1.2.4,支持Eclipse版本3.2、3.3。這個插件的優點是版本比較、合并很清晰,但前提是要用到Eclipse。
安裝方法:打開Eclipse,選擇菜單欄中的 Help -> Software Updates -> Find And Install。
選擇Search for new features to install,然后 Next。
點擊右邊的New Remote Site按鈕,出現的對話框中,Name項可以隨便填寫,例如subclipse,URL項填寫:http://subclipse.tigris.org/update_1.2.x。然后確定。
確定之后,在網站列表中,可以看到新加入了Subclipse一項,鉤選之,然后Finish。稍等n秒,出現如下界面:
鉤選下面的subclipse1.2.4。然后一路Next,或者Finish。就開始安裝了。注意后面有一部需要選擇同意他的使用協議。安裝時間根據網速的不同而不同。
2. TortoiseSVN 這個是Windows操作系統上的Svn客戶端。有中文語言包,與Windows系統結合得比較好,可以直接在資源管理器中做版本管理操作。這個工具的優點是小巧,不依賴別的什么軟件,缺點是比較、合并等界面我覺得不太理想。
安裝文件下載地址:http://tortoisesvn.net/downloads,注意這個頁面上有TortoiseSVN的安裝文件,還有語言包,最好都下載吧。
安裝TortoiseSVN完成后,要求重新啟動機器。
3. AnkhSVN,這個是VS.NET的SVN插件,我沒有用過,有興趣的同事可以查一下。
工具使用:
1.Subclipse 按照基礎操作類型,描述如下:
檢出項目:在Eclipse的項目導航區域點擊右鍵,Import,出來的對話框中選擇最下面的從SVN導入項目。然后選擇列表中的svn服務器地址,或者創建新的svn服務器地址。然后一路確定,要輸入用戶名密碼的話按照帳號管理人分配的帳號輸入就可以了。
共享項目:意思是把一個目前只在我機器上的項目發布到SVN版本庫。在項目上點擊右鍵,選擇Team -> Share Project。然后選擇SVN,后面的步驟就基本上一樣了。
比較:比較本地版本和服務器上的版本的差異,選擇Team -> 與資源庫同步。比較的結果中,灰色的向右的肩頭代表本地版本作了修改,還沒有提交到服務器。藍色的向左的箭頭代表尤其他人修改了該文件,并且提交到了版本庫,本地文件需要更新。紅色的雙向箭頭代表本地文件和服務器上的文件有沖突,需要合并。
在比較結果上,點擊右鍵,可以執行更新、提交等操作。
更詳細的文檔:
A. Eclipse安裝Subclipse之后,也會安裝Subclipse的文檔,點擊Help -> Help Contents,左邊的樹上會列出所有的文檔,其中有Subclipse的文檔。英文的,但有截圖,說得也很好懂。(推薦)
B. http://dev2dev.bea.com.cn/techdoc/20060620822.html
2.TortoiseSVN,安裝語言包之后,直接在資源管理器的目錄上點擊右鍵,就可以看到有TortoiseSVN的相關操作了。
檢出項目:建立一個空目錄,在目錄上點擊右鍵,選擇SVN檢出,后面按照提示輸入地址等信息就可以了。
共享項目:在項目目錄上點擊右鍵,TortoiseSVN -> 導入,填入地址,按照提示操作就可以了。但是注意,完成之后,版本庫中已經有了這個項目,但你本地的這一份項目和版本庫依然沒有任何聯系。此時要新建立一個目錄,執行上面說的檢出操作。
比較、提交、更新等操作就使點擊相應的選項。略。
另外還有兩個經常用到的操作是鎖定和還原。一個人鎖定某個文件或者目錄后,別人都不能鎖定,也不能提交。另外,如果我從服務器上更新下來一個文件a.txt,修改了一部分內容后,又發現改得不好,希望恢復到服務器上的樣子。那么可以執行還原操作。
更詳細的文檔:
A.安裝TortoiseSVN中文包之后,其幫助文檔也成了一個半中文半英文的翻譯版本。值得一看。
B.http://www.subversion.org.cn/tsvndoc/ (推薦)
C.http://fairyfish.net/2007/09/08/tortoisesvn-introduce/
第二部分:高級使用
主要包含如下內容:打版本標記、分支操作
標記和分支可以理解為都是項目的一份拷貝。只不過用途不同。而實際上這兩個東西在SVN服務器上是沒有區別的。
建立標記、分支:所謂打標記,和CVS里面的Tag as a version是一個意思。就是整個項目的當前狀況拍一個照片,放在某目錄,日后方便查看。例如我們可以記住某項目的134版本是這個階段工作的階段性成果,而使用標記,我們可以把這個項目的134版本拷貝一份放在某個目錄,并命名為project_a_final_20080227。以后任何時候都可以從這個位置方便的找回這個版本。
在Subclipse中,SVN操作選項中有Tag/Branche選項,點擊之,第二個地址就是tag的存放地址(分支、標記存放在哪里都有一些一般性的建議,關于版本庫的規劃請參見另外一份文檔《版本庫結構規劃建議》)。
而在TortoiseSVN中,也有分支/標記這樣的選項。操作起來大同小異。
分支的創建和上面的Tag創建是完全一樣的,只不過我們一般建議把分支存放于一個叫做branches的目錄。
切換分支:假設我們創建了一個分支叫做branchesA。之后開發人員可以工作在主干或者這個分支上,二者之間的切換也很簡單,菜單中有一個“切換”選項。點擊按提示操作即可。
分支合并:這個是分支開發中最重要的一步。假設BranchesA是為了一個新功能的開發而創建的,那么該功能開發完成后,需要把這個分支合并回到主干上來。這時可以選擇SVN操作菜單中的“合并”功能。
所謂合并,實際上是比較兩個資源的不同,找出差異,并將這個差異應用到本地工作拷貝上。
合并的過程中涉及到的兩個資源一般稱作起始路徑和目標路徑。這兩個路徑的選取是很隨意的。舉以下幾個例子:
起始路徑 http://domain/svn/project/branches/b1 創建分支時的版本(例如130)
目標路徑 http://domain/svn/project/branches/b1 當前最新版本(例如200)
假設本地拷貝 該項目的主干版本
合并操作可以表達為:
本地版本 + (分支當前版本 - 分支創建時的版本) = 合并后的版本
(我們可以將開發理解成在版本庫上的一種增量操作,此時括號中的減法得出的是一個正值,例如“增加了a.txt這個文件”)
合并意義:比較分支b1創建時的樣子和現在的樣子,找出差異(注意這個差異實際上就是b1分支的開發成果),將這個差異應用到本地工作拷貝。而當前工作拷貝是項目的主干本本,這就意味著把分支b1的開發成果應用到了主干上,經過檢查、提交到版本庫,最后達到了將分支開發所完成的功能合并到了主干上的目的。
------------------------------------------------------------------------------------------------------------
起始路徑:http://domain/svn/project/odps 上一次提交給信訪項目時的版本 120
目標路徑:http://domain/svn/project/odps 當前版本 145
假設本地拷貝:信訪項目的當前版本
合并操作表達如下:
項目A當前版本 + (框架當前版本 - 框架上次提交給項目時的版本) = 項目A進行了框架升級后的版本
(注意其中的減法結果依然是正值)
合并意義:比較上一次把odps框架提交給信訪項目使用時的樣子和該框架現在的樣子,找出差異,應用到本地工作拷貝。而當前工作拷貝是信訪項目,這就意味著把ODPS框架這個階段開發的成果應喲功能到信訪項目中,經過檢查、提交到版本庫,最后達到的目的是把信訪項目中的ODPS項目部分進行了升級(ODPS框架和信訪項目是由不同的小組開發的,所以這個操作很有意義)。
------------------------------------------------------------------------------------------------------------
起始路徑:http://domain/svn/project/trunk 當前版本 300
目標路徑:http://domain/svn/project/trunk 某個歷史版本 250
工作拷貝:http://domain/svn/project/trunk 當前版本 300 ,與起始路徑相同
注意:這個例子和上面兩個例子不同,上面兩個例子其實路徑在時間上都早于目標路徑。
合并操作表達如下:
項目當前版本 + (項目歷史版本250 - 項目當前版本) = 項目回滾后的版本
注意這一次括號中的減法操作按照上面的規則來講得出的結果是負的。也就是說,假設我們在開發過程中新增了一個文件a.txt,那么減法(新版本 - 舊版本)表達的含義是“以當初的版本位處發現,看現在的版本”,得出的結論是新增了一個文件a.txt,而減法(舊版本- 新版本),也就是把起始路徑和目標路徑的時間順序倒了一下,表達的含義就變成了“站在今天,看過去有什么不同”,得出的結論是少了一個a.txt文件。
合并意義:從現在看過去,整個差異部分“加了一個負號”,經過檢查、提交,最后的結果是當前項目恢復到了歷史上的250版本。
其它:單一差異文件,補丁
上面的分支合并操作是比較兩個資源的不同,將差異應用到本地工作拷貝。在此之外,SVN可以比較兩個資源的不同,并將這些不同之處記錄在一個獨立文件中。而這一個差異文件也就是所謂的補丁。