1,安裝完服務端VisualSVN Server和客戶端TortoiseSVN 后,隨便在一個文件夾下,右鍵,會看到有SVN checkout 選項,這個選項只有在第一次在倉庫下下載的時候會用到;
1)checkout的第一個路徑:,如果客戶端SVN和服務端SVN是裝在同一台機器上:當選擇checkout時,第一項需要選擇一個服務端倉庫路徑:到SVN服務端選中某個倉庫,被選中后,窗口頂部會出現一個路徑,改路徑就可以填寫在checkout的第一項空格里;
如果客戶端SVN和服務端SVN 不是在同一台機器上,甚至不是在一個局域網內,而是通過公網去訪問,此時上面的路徑中的計算機名就要改成IP地址+端口號的形式(ip地址就是服務端所在的公網ip,端口號就是服務端安裝時顯示的端口號);
2)checkout的第二個路徑:是希望將checkout放在本地磁盤的哪個路徑,如果希望存到文件夾里,不必新建一個文件夾,直接寫文件夾名字,若檢測到沒有,會自動創建的;這個文件夾是用來和服務端聯系的文件夾Test;在這個Test文件夾下,可以進行各種關於SVN客戶端的增刪改查操作;
3)填寫完后,會出現一個Accept the certificate permanently 的提示,選擇上面的Accept the certificate permanently提示,以后就不會出現了,再繼續,會出現填寫用戶名和密碼,填寫曾經在服務端創建的User用戶名,密碼即可;並且選中左下角的方框,否則下次還會要求你輸入;
4)完成后,打開checkout在本地磁盤的路徑的文件夾下,會有.svn文件夾,若沒有,則應該去設置“文件夾選項”--查看-->把隱藏文件夾選項 不要選中 ,就會顯示出來了
3,SVN的基本操作:都要通過commit與服務端聯系;
1)新增(提交)文件:在Test文件夾下,新增一個文件Test.java,會顯示藍色的問號,表示客戶端和服務端有差異了,客戶端多了一個等待提交的文件;在當前Test文件夾下,右鍵,點擊SVN commit 提交,然后在彈出的對話框下部,選中java文件,OK;然后該文件的圖標從藍色的問號變成綠色的對號,並且在服務端建好的倉庫Test下,會看到提交上來的java文件;
2)刪除文件:直接在(磁盤里刪除)Test文件夾下,右鍵刪除即可,此時,在剛才提交java文件的對話框中,java文件顯示為紅體字,顯示為missing,表示客戶端刪除了該文件,但服務端還存在該文件,這時,只要將其再次選中,OK,即在服務端將該文件也刪除了;
3)修改文件:在Test.java文件里面寫幾行代碼保存后,該文件圖標變成紅色的感嘆號;這個文件與服務端的java文件不同,可以通過查看服務端的該文件,右鍵點擊Browser(通過瀏覽器查看,會提示輸入用戶名和密碼,輸入在服務端創建的用戶名,密碼即可);
再在Test文件夾下,右鍵單擊SVN commit提交,然后彈出的對話框顯示此時的該文件是modified狀態;選中提交即可;圖標會變成綠色的對號,表示提交成功;
4,SVN常見問題一:其他人的代碼覆蓋了自己的;
在服務端創建了A和B兩個用戶,現在清空A的權限(在文件夾下,右鍵點擊TortoiseSVN->settings->點擊clear all即可),使B來進行操作,讓B來下載A已上傳的文件Test.java(因為實際工作中,就是會同時有很多人共用一個項目),接下來讓A操作Test,B操作B的Test,再次返回到Test文件夾的上級目錄,右鍵Checkout一個B的Test文件,起名為B_Test,此時因為清空過權限,會再次彈出Accept the certificate permanently,選中后,此時,不要點擊左下角的保存權限了,因為A和B 來回切換,要經常改用戶名和密碼;checkout之后,就會發現B_Test文件下也將Test.java下載下來了;
每天上班第一件事就是SVN update更新代碼,下班前第一件事就是SVN commit提交代碼
由於多人共享一個項目文件,A的代碼可能會被B無形之中改成自己的代碼;A如何找回自己的代碼呢?
右鍵點擊TortoiseSVN->show logs(查看歷史記錄):
想要將A的文件修復,就在A的文件上右鍵,點擊Revert to this version ,彈出對話框在,再revert即恢復到這個版本了;
操作完之后,再查看Test.java文件,會發現內容又變回A編輯的內容了;不要忘記然后再右鍵提交即可;
2)填寫修改的原因:在提交時出現的對話框的上半部分,填寫修改原因;
如:B又一次改寫代碼,在原來的基礎上添加了一個S;z在提交時,應該注明原因;
3)B又一次將文件給刪除了,A到自己的Test文件夾下,SVN update后,發現java文件已被刪除了,此時,沒有辦法直接在被修改的文件上show log了,可以直接在根目錄Test下 ,右鍵點擊TortoiseSVN->show log就會發現所有的更改記錄;
會發現最后一次操作是B操作的,在對話框的下半部分,顯示是delete刪除操作;再找到對應的以前的文件保存到本地Test目錄下,再次提交即可;
4)自從第一次提交文件后,文件就會保存到本地磁盤的倉庫Resposity中,只要這個倉庫存在,就沒問題;
SVN問題二:A和B同時修改代碼,但是修改的不是同一行(同一個地方)
1)A和B 同時修改了文件,但B先提交了,當A提交的時候,就會報錯:已過時,
會提示你進行更新:
按提示點擊更新:
會提示Merged,是因為,B已經提交過了,兩個文件可能已經合並了;再點擊OK繼續提交即可;
此時再查看已提交的java文件,變成了A和B 原來提交的代碼合成之后的代碼;這種情況稱為SVN的自動合並;
3,SVN問題三:A和B同時修改代碼,並且修改的是同一行(同一個地方),此時就不會像上一個問題一樣SVN自動合並了;
B先提交了,然后等到A提交的時候,還會報錯:
點擊OK,提示更新,按步驟點擊更新:
這時會提示,文件發生矛盾conflicted:
同時在根目錄Test文件夾下,除了Test.java文件外,新增了三個文件:
此時,Test.java文件的圖標變成了黃色的感嘆號,說明SVN已經不能自動合成了;此時就不要再點擊OK提交了;而是如下操作;
Test.java.mine文件是自己想要改成的代碼(自己修改后的代碼);
Test.java.r13文件是自己修改之前認為它是自己修改之前的最新版的代碼;
Test.java.r15文件是自己修改之前真正的(B修改后的,真正的被認可的)最新版的代碼;(數字越大版本最新);
此時只要確定需要那個版本的代碼,然后修改即可,注意:不要隨便在某個文件里面改動(如Test.java.r13等);假如想留下自己的(Test.java.mine)代碼,只要將該文件復制到別處(如桌面),然后重命名為Test.java然后粘回來,覆蓋Test.java.mine文件->覆蓋之后變成帶有黃色感嘆號的Test.java文件,再右鍵,點擊Tortoise SVN ->revert->點擊OK:會看到,文件恢復成功,並且多余的三個文件也消失了;
3,SVN問題三:
A更改且添加了代碼,B也更改且添加 了代碼,更改的地方也相同,此時假如B先提交了,當A 提交的時候,顯然還會出現conflicted矛盾的問題,此時執行到:
就不要繼續更新了,因為我們知道更新的話,會出現多余的三個文件;此時先取消更新,隨之彈出的對話框也取消;
回到當前的的根目錄下,將自己的要提交的文件復制到別處(如桌面)並且重命名(否則要提交的文件會丟失),然后再粘回來,
對以前的帶紅色感嘆號的Test.java文件先進行恢復(右鍵-點擊Tortise SVN -revert)恢復到以前的版本變成綠色的對號的圖標,然后再更新SVN update(因為B已經提交過了,更新一下,查看和A自己的有什么不同);更新完后,選中兩個文件,右鍵->Tortise SVN ->Diff->:
帶背景顏色的地方就是不同點;回到 根目錄下,將需要留下的不同的代碼復制粘貼到Test.java里面,然后將其提交,此時保存自己代碼的另一個文件可以刪除了;此時提交后的文件就是A和B的代碼的合並了;同時B 要記得去更新代碼(因為另一方已提交過了);
另一種情況就是:B又將A曾經添加的方法內容進行了修改,A呢卻一直沒發現,就這樣不同的人無論是A或是B有可能還有別人一直在開發提交,到最后終於發現了,此時需要找到是誰修改的,與之協商並解決,在根目錄下,右鍵,單擊Tortise SVN-點擊show log-對比查看何時何人進行了修改(同時選中兩個版本,右鍵-compare revisions,可以看到,點擊文件可以看到區別,發現是否更改),再進行解決即可;