對比工具可以使用 winmerge 和 beyond compare ,winmerge免費小巧,beyond compare功能更強大。這兩款工具都比TortoiseSVN自帶的對比工具要好一些。
在TortoiseSVN中的配置方法:
winmerge安裝時勾選集成到TortoiseSVN
beyond compare要復雜一些,右鍵,TortoiseSVN - 設置,
差異查看器( Diff Viewer ),設置用來比較不同版本文件的程序( comparing different revisions of files ),設置用來比較不同版本屬性的程序( comparing different revisions of properties ),勾選外部,輸入
" D:\Program Files\Beyond Compare 3 \BComp.exe " %base %mine /title1=%bname /title2=%yname /leftreadonly
差異查看器/合並工具( Merge Tool),勾選外部,輸入
" D:\Program Files\Beyond Compare 3\BComp.exe " %mine %theirs %base %merged /title1=%yname /title2=%tname /title3=%bname /title4=%mname
紅色部分為beyong compare的路徑,要帶雙引號。
創建本地版本庫
要測試TortoiseSVN的功能,總不能在公司的正式服務器上亂搞把,所有先要創建一個測試的版本庫。
新建一個文件夾,名字不要用中文,進入文件夾,點擊右鍵TortoiseSVN - 在此創建版本庫。
TortoiseSVN會在這個文件夾創建版本庫,並且會彈出一個提示框
點擊“創建目錄結果”,然后啟動版本庫瀏覽器,就可以看到版本庫的目錄結構
通過點擊“創建目錄結果”,TortoiseSVN自動創建了3個文件夾, branches,tags,trunk, 很多人都會使用TortoiseSVN,但是對這三個目錄去取不了解。
trunk目錄
主干目錄,一般情況下是在此目錄下進行代碼的開發,這個目錄應該存放最新的代碼。
tags目錄
代碼的版本標記,這個目錄的代碼不允許更改,比如,軟件發了1.0版本,就需要將1.0版本的代碼在tags中放一份拷貝,發了2.0,就要在tag中標記一個2.0。如果1.0軟件出現了bug,開發人員要驗證bug,直接從tag中取1.0版本的代碼就可以了,不會把個個版本混淆。
branches目錄
分支 目錄,用於開發新功能或解決老版本的bug。比如,1.0版本上線,開發人員全力投入2.0版本的開發,但是,1.0版本突然出現了一個bug必須要修復,而且很緊急,不能等到2.0版本上線,這時候該怎么辦呢。正確的做法是,從tag中取1.0版本的代碼,建立一個新的分支,開發人員在這個分支上解決1.0發現的bug,解決完成並測試通過之后,在tag中添加一個新的版本標記,比如1.1,然后關閉這個分支。如果1.1再出現bug,那么從1.1建立分支,以此類推,直到2.0出現。
加入和檢出工程
由於版本庫是本地,我們可以通過文件路徑來訪問,右鍵TortoiseSVN - 版本庫瀏覽器,輸入
file:///F:/svn_test/
F:/svn_test/就是剛才創建版本庫的文件夾
打開版本庫瀏覽器,在trunk目錄點擊右鍵,加入文件夾,加入一個新的Android工程TestSVN。
然后將這個工程檢出
.settings bin gen這三個目錄和代碼無關,要先忽略掉,選中這三個目錄,右鍵 TortoiseSVN - 去除版本控制並增加的忽略列表。
提交代碼后,這3個文件夾有改變的話不會有提示。
修改代碼
刪除文件 ,正確的做法是在要刪除的文件上點擊右鍵 - TortoiseSVN - 刪除。
還原修改 ,右鍵 - TortoiseSVN - 還原。
重命名 ,同樣,右鍵 - TortoiseSVN - 改名。
增加文件 ,右鍵 - TortoiseSVN - 增加,文件會變成小加號
移動文件 ,直接打開版本庫瀏覽器拖動,或者剪切,提交
解決沖突 ,沖突形成的原因是兩個人同時修改了一個文件的同一個地方,
例如:原始文件為,版本為1
package com.example.test;
public class Test { String test = null; public Test(String test){ this.test = test } }
A和B都checkout這個文件,A修改了文件並進行提交,文件版本變為2
package com.example.test;
public class Test { String test = null; public Test(String test){ this.test = "test" } }
B修改了文件
package com.example.test;
public class Test { String test = null; public Test(String test){ this.test = "aaa" } }
這時候,如果B更新文件,就會提示沖突
沖突原因是兩人同時在版本1上進行了修改。
這時要求B對比對比A做的修改和自己的修改,同A溝通后確定最終的代碼,然后進行合並。
這里用B的代碼為最終代碼,修改方法為:
在沖突文件點右鍵 - TortoiseSVN - 編輯沖突,在最下面的編輯框沖突的地方,也就是是紅色嘆號的位置點擊右鍵
選擇使用“我的”文本塊,合並后的代碼為:
package com.example.test;
public class Test { String test = null; public Test(String test){ this.test = "aaa" } }
去掉了this.test = test,增加了this.test = "aaa",保存,彈出窗口
選擇標記為解決,沖突的嘆號就沒有了,文件就可以正常的提交了。
如果使用beyond compare的3路合並工具的話,代碼更加的直觀
左邊為B修改后的文件,中間為原始文件,右邊為A修改后的文件,最下邊為合並后的文件。點擊藍色小箭頭使用左邊文件,點擊黃色小箭頭使用中間文件,點擊紫色小箭頭使用右邊文件。
修為完成保存后,要手動標記為解決,右鍵 - TortoiseSVN - 解決。
創建分支和標記
說白了就是在其他的文件放一份拷貝,打開版本庫瀏覽器,在要創建分支或標記的工程目錄上點擊右鍵
選擇復制到,輸入目標路徑,分支是branches,標記是tags
最好輸入日志信息,這樣就實現了分支或標記
可以通過分支圖查看,每增加一個分支,版本號加一。
創建和應用補丁
如果有多個分支,比如XXX紀念版,XXX專版,XXX增值版,修改一個地方要同步到多個分支,是個很麻煩的事情,這時候可以用補丁來解決。
還是使用上面的工程,有一個主干和兩個分支,主干中有一個 Test.java 文件
public class Test { private String test; public Test(String test) { this.test = test; } }
將 “this.test = test;” 修改為 “this.test = "aaa";”
在文件夾的空白處點右鍵 - TortoiseSVN - 創建補丁,選擇修改的文件,點確定,創建一個Test.java.patch的補丁
在檢出的分支中點擊右鍵 - TortoiseSVN - 應用補丁,補丁效果如下
合並
在要合並的副本點擊空白處點擊右鍵 - TortoiseSVN - 合並,
選擇第三個選項,
關於起始和結束的url,查看版本分支圖
結束的必須大於起始的的版本號,我想把b1分支的版本5合並到主干,就按下圖填寫
提交代碼后再次查看版本分支圖
主干的版本號升級為6,合並完成。