Subversion(SVN)是優秀的版本控制工具,其具體的的優點和詳細介紹,這里就不再多說.SVN分為客戶端和服務器端,一般服務器端安裝在服務器上,我們開發者用的都是客戶端。TortoiseSVN是客戶端,VisualSVN是服務器。其實對於類似的可以延伸,一般牽扯到服務器的,往往都會有對應的客戶端,在使用的時候應注意這些。
整理:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2408089.html和http://blog.csdn.net/windone0109/article/details/4857044
首先來下載和搭建SVN服務器.
現在Subversion已經遷移到apache網站上了,下載地址:
http://subversion.apache.org/packages.html
這是二進制文件包的下載地址,你可在左側的導航欄找到源代碼,文檔的下載地址.
windows操作系統下面的二進制文件包一共有5種,如圖:
個人認為最好用VisualSVN server 服務端和 TortoiseSVN客戶端搭配使用.
點開上面的VisualSVN連接,下載VisualSVN server,如圖:
然后下載TortoiseSVN客戶端,官網下載地址:http://tortoisesvn.net/downloads.html
注意下載跟你電腦匹配的安裝包,在頁面的下面你還可以找到語言包,如圖:
下載完成后,應該有這些安裝包,如圖:
TortoiseSVN安裝包和簡體中文語言包
VisualSVN server安裝包
先安裝VisualSVN server的安裝包,雙擊VisualSVN server安裝包,如圖:
點Next,進入下一步,如圖:
點同意,進圖下一步,如圖:
選擇上面一個選項,點Next,進入下一步,如圖:
Location是指VisualSVN Server的安裝目錄,Repositorys是指定你的版本庫目錄.Server Port指定一個端口,Use secure connection勾山表示使用安全連接,Use Subversion authentication 表示使用Subversion自己的用戶認證.點擊Next,進入下一步,如圖:
點Install,進入下一步,如圖:
等待安裝完成,如圖:
安裝完成后,啟動VisualSVN Server Manager,如圖:
接下來我們安裝TortoiseSVN,雙擊安裝包,進入下一步.如圖:
點擊Next,進入下一步,如圖:
選擇接受,然后點擊Next,進入下一步,如圖:
選擇安裝路徑,然后點擊Next,進入下一步,如圖:
點擊Install,開始安裝,如圖:
等待安裝完成,安裝完成后如圖:
接下來我們安裝簡體中文語言包,這個非常簡單,一路Next就行,就不截圖了.語言包安裝完成以后在桌面任意空白地方單擊鼠標右鍵,會在右鍵菜單里找到SVN,如圖:
選擇設置,進入下一步,如圖:
在右邊的語言里面選擇簡體中文,然后點擊應用,確定,漢化即完成,如圖:
到這里,服務端和客戶端都已經安裝完畢。安裝完成后,這只是第一步,我們還需要在服務器上做配置,比如導入項目,建立用戶......
首先打開VisualSVN Server Manager,如圖:
可以在窗口的右邊看到版本庫的一些信息,比如狀態,日志,用戶認證,版本庫等.要建立版本庫,需要右鍵單擊左邊窗口的Repositores,如圖:
在彈出的右鍵菜單中選擇Create New Repository或者新建->Repository,進入下一步:
輸入版本庫名稱,勾上Create default structure復選框(推薦這么做).點擊OK,版本庫就創建好了,版本庫中會默認建立trunk,branches,tags三個文件夾,如圖:
這時候我們將項目導入到版本庫中,找到你的項目文件夾,在項目文件夾上點擊鼠標右鍵,找到SVN菜單,選擇導入,如圖:
在彈出的對話框中填上版本庫URL,這個URL可以從VisualSVN Server Manager中獲取,在你的版本庫上單擊右鍵,選擇Copy URL to Clipboard,這樣就把版本庫URL復制到你的剪貼版了.如圖:
將復制的版本庫URL粘貼上,在URL后面加上trunk子路徑.然后在導入信息里面填上導入信息"導入項目到版本庫".如圖:
點擊確定,所選中的項目就會被導入到版本庫中.如圖:
項目導入到版本庫以后,不能隨便讓誰都能夠讀寫版本庫,所以需要建立用戶組和用戶.
在VisualSVN Server Manager窗口的左側右鍵單擊用戶組,選擇Create User或者新建->User,如圖:
在彈出的對話框中填寫User name和Password,然后點擊OK,如圖:
用相同的方式分別創建用戶Develpoer1,Develpoer2,Develpoer3,Test1,Test2,Manger六個用戶,分別代表3個開發人員,兩個測試人員和一個項目經理,如圖:
然后我們建立用戶組,在VisualSVN Server Manager窗口的左側右鍵單擊用戶組,選擇Create Group或者新建->Group,如圖:
在彈出窗口中填寫Group name為Developers,然后點Add按鈕,在彈出的窗口中選擇三個Developer,加入到這個組,然后點Ok,如圖:
用相同的方式創建組Managers,Testers,如圖:
接下來我們給用戶組設置權限,在MyRepository上單擊右鍵,選擇屬性,如圖:
在彈出的對話框中,選擇Security選項卡,點擊Add按鈕,選中Developers,Managers,Testers三個組,然后添加進來,給Developers,Managers權限設置為Read/Write,Tester權限設置為Read Only,如圖:
到此,服務端就完成了.
接下來,我們用客戶端去檢出代碼,在桌面空白處單擊右鍵,選擇SVN檢出,在彈出的對話框中填寫版本庫URL(具體獲取方式,上面講上傳項目到版本庫的時候講過),選擇檢出目錄,點擊確定.如圖:
開始檢出項目,如圖:
檢出完成之后,我們打開工作副本文件夾,會看到所有文件和文件夾都有一個綠色的√.如圖:
至此,創建版本庫和使用TortoiseSVN導入項目,檢出項目已經介紹完畢.接下來看下SVN的相關操作。
添加文件
在檢出的工作副本中添加一個Readme.txt文本文件,這時候這個文本文件會顯示為沒有版本控制的狀態,如圖:
這時候,你需要告知TortoiseSVN你的操作,如圖:
加入以后,你的文件會變成這個狀態,如圖:
這時候使用TortoiseSVN進行提交.這樣別人就能看到你所做的更改了,如圖.
修改文件
使用TortoiseSVN更新,修改工作副本中的Readme.txt文件,加入"hello world!",然后保存,你會發現Readme.txt文件的圖標改變了,如圖:
這個紅色的嘆號代表這個文件被修改了,這時候,提交更改,其他人即可看到你的更改.
重命名文件
使用TortoiseSVN更新,重命名工作副本中的Readme.txt文件為"Readme1.txt',然后保存,你會發現Readme.txt文件的圖標改變了,如圖:
更添加文件一個道理,這時候你需要告訴TortoiseSVN你的操作,如圖:
加入以后,提交,這時候版本庫中的Readme.txt文件將會被重命名為"Readme1.txt".
刪除文件
使用TortoiseSVN更新,使用TortoiseSVN刪除工作副本中的Readme.txt文件,然后提交,版本庫中的相應文件即被刪除掉了,如圖:
強制寫注釋
為了以后你能更清晰的看到你所做的每一次更改的原因,你在每次提交的時候應該寫上注釋,而且盡量詳細.如圖:
但是,可能有的人因為覺得太繁瑣,而不填寫注釋,這不利於以后的版本控制,可以將強制在提交的時候寫注釋,首先單擊右鍵,選擇TortoiseSVN->屬性,如圖:
在彈出的對話框中,點擊新建->日志大小,設置提交日志的最小字符數和鎖定日志的最小字符數為20,提交文本框中顯示邊線的字符位置設置為100,點擊確定,如圖:
提交,以后再次提交的時候,如果輸入的注釋少於20個字符,將無法提交.
沖突解決
沖突問題是最常見的問題,它是這樣產生的,A用戶check out了一個工作副本A,接着B用戶又check out了一個工作副本B.然后A用戶對副本A中的文件C做了修改(可以是內容修改,文件刪除,重命名,以及位置移動),並且提交.這時候B用戶也對文件C的相同部分做了修改,這時候如果B用戶進行提交,會先被告知版本過時,要求更新,然后更新的時候會提示沖突了,這時候可以用沖突編輯器進行手動選擇.
假設A、B兩個用戶都在版本號為100的時候,更新了kingtuns.txt這個文件,A用戶在修改完成之后提交kingtuns.txt到服務器,這個時候提交成功,這個時候kingtuns.txt文件的版本號已經變成101了。同時B用戶在版本號為100的kingtuns.txt文件上作修改,修改完成之后提交到服務器時,由於不是在當前最新的101版本上作的修改,所以導致提交失敗。
版本沖突現象:
沖突發生時,subversion會在當前工作目錄中保存所有的目標文件版本[上次更新版本、當前獲取的版本(即別人提交的版本)、自己更新的版本、目標文件]。
假設文件名是kingtuns.txt
對應的文件名分別是:
kingtuns.txt.r101
kingtuns.txt.r102
kingtuns.txt.mine
kingtuns.txt。
同時在目標文件中標記來自不同用戶的更改。
版本沖突解決:
場景:
1、現在A、B兩個用戶都更新kingtuns.txt文件到本地。
2、文檔中原始文件內容如下:
3、A用戶修改文件,添加內容“A用戶修改內容”完成后提交到服務器
4、B用戶修改文件,添加內容“B用戶修改內容”完成后提交到服務器
B用戶提交更新至服務器時提示如下:
B用戶將文件提交至服務器時,提示版本過期:首先應該從版本庫更新版本,然后去解決沖突,沖突解決后要執行svn resolved(解決),然后在簽入到版本庫。在沖突解決之后,需要使用svn resolved(解決)來告訴subversion沖突解決,這樣才能提交更新。
解決沖突有三種選擇:
A、放棄自己的更新,使用svn revert(回滾),然后提交。在這種方式下不需要使用svn resolved(解決)
B、放棄自己的更新,使用別人的更新。使用最新獲取的版本覆蓋目標文件,執行resolved filename並提交(選擇文件—右鍵—解決)。
C、手動解決:沖突發生時,通過和其他用戶溝通之后,手動更新目標文件。然后執行resolved filename來解除沖突,最后提交。
解決步驟如下:
1、 在當前目錄下執行“update”(更新)操作
2、 在沖突的文件上(選中文件--右鍵菜單—TortoiseSVN—Edit conflicts(解決沖突)),出現如下窗口
Theirs窗口為服務器上當前最新版本
Mine窗口為本地修改后的版本
Merged窗口為合並后的文件內容顯示
3、 如果要使用服務器版本,在Theirs窗口選中差異內容,右鍵,選擇Use this text block(使用這段文本塊)。
同理如果要使用本地版本,在協商后,在Mine窗口右鍵,選擇Use this text block(使用這段文本塊)。
4、 修改完成后,保存kingtuns.txt文件內容。
5、 在B用戶的沖突目錄下,選中文件--右鍵菜單—TortoiseSVN—Resolved(解決)。會列出沖突的文件列表,如果確認已經解決,點OK。
6、 沖突解決
7、提交解決沖突后的文件。
如何降低沖突解決的復雜度:
1、當文檔編輯完成后,盡快提交,頻繁的提交/更新可以降低在沖突發生的概率,以及發生時解決沖突的復雜度。
2、在提交時,寫上明確的message,方便以后查找用戶更新的原因,畢竟隨着時間的推移,對當初更新的原因有可能會遺忘
3、養成良好的使用習慣,使用SVN時每次都是先提交,后更新。每天早上打開后,首先要從版本庫獲取最新版本。每天下班前必須將已經編輯過的文檔都提交到版本庫。