TortoiseSVN日常操作指南

TortoiseSVN日常操作指南

目錄

1. 使用………………………………………………………………………………………………………………. 3

2. 認證……………………………………………………………………………………………………………... 3

3. 導入數據到倉庫……………………………………………………………………………………………… 4

3.1. 倉庫規劃……………............................................... …………………………..4

3.2. 導入……………………………………………………………………………………………………... 6

3.3. 特殊文件……………………………………………………………………………………………... .7

3.4. 參考項目…………………………………………………………………………………………….... 7

4. 取出工作副本.………………………………………………………………………………………………...7

5. 獲取狀態信息…………………………………………………………………………………………………. 8

5.1. 重載圖標………………………………………………………………………………………………. 9

5.2. 資源管理器中的專欄……………………………………………………………………………... 10

5.3. 倉庫狀態…………………………………………………………………………………………….... 10

5.4. 查看區別…………………………………………………………………………………………………11

6. 更新工作副本………………………………………………………………………………………………….11

7. 解決衝突………………………………………………………………………………………………………..12

8. 把你的修改發送到倉…………………………………………………………………………………….13

9. 獲取(修改)文件(目錄)信息……………………………………………………………………….15

10. 整合Bug跟蹤系統……………………………………………………………………………………… 18

11. 加入新文件和新目錄……………………………………………………………………………………. 20

12. 忽略文件和目錄…………………………………………………………………………………………… 20

13. 刪除、重命名、移動……………………………………………………………………………………..21

14. 取消改變……………………………………………………………………………………………………. 22

15. 修訂日誌窗口……………………………………………………………………………………………… 23

15.1. 調用日誌窗口……………………………………………………………………………………….24

15.2. 獲取附加信息………………………………………………………………………………………. 25

15.3. 獲取所有日誌……………………………………………………………………………………….26

15.4. 修改日誌內容和作者……………………………………………………………………………..27

15.5. 統計信息………………………………………………………………………………………………27

16. 分支/標記. …………………………………………………………………………………………………..27

16.1. 創建分支或標記…………………………………………………………………………………….28

16.2. 取出還是切換……………………………………………………………………………………….30

17. 合併………………………………………………………………………………………………………….…31

17.1. 合併指定版本範圍……………………………………………………………………………….…31

17.2. 合併兩個不同的目錄樹……………................................................. ….33

18. 創建和應用補丁………………………………………………………………………………………….. 34

18.1. 創建補丁………………………………………………………………………………………………34

18.2. 應用補丁…………………………………………………………………………. …………………35

19. 副本重定位…………………………………………………………………………………………………..36

20. 倉庫瀏覽器……………………………………………………………………………………………………39

21. TSVN的設置……………………………………………………………………………………………….. 39

21.1. 一般設置................................................................................ 39

21.2. 外觀感受設置.......................................................................... 41

21.3. 網絡設置................................................................................ 42

21.4. 比較/合併設置......................................................................... 43

22. 誰動了哪一行……………………………………………………………………………………………….43

23. 版本路線圖…………………………………………………………………………………………………. 46

 

 

 

 

 

 

 

1.使用TortoiseSVN

  

1:在版本控制下的目錄菜單

    所有TortoiseSVN命令都集成在Windows的資源管理器的菜單中。當你在一個文件或文件夾單擊鼠標右鍵時,大多數命令都會直接顯示出來。哪些菜單顯示出來,依賴於文件或文件夾是否處於版本控制之下。

在工作副本目錄中,當你用鼠標右鍵拖拽文件或文件夾到一個新目錄,或者把沒有在版本控制下的文件或文件夾拖拽到版本控制下的目錄中,就會顯示另外一些命令在右鍵菜單中。

2.認證

   假如你試圖訪問一個有密碼保護的倉庫,一個認證對話框會跳出來。

2:認證對話框

輸入你的用戶名和密碼。那個複選框可以讓TortoiseSVN保存認證信息在Subversion的默認目錄中。

如果你想讓SubversionTortoiseSVN忘記你的認證信息,你必須刪除相關的文件。

3. 導入數據到倉庫Importing Data Into A Repository

3.1. 倉庫規劃Repository Layout

在將數據導入到倉庫之前,你必須先想好如何組織存放你的數據。如果你使用一種我們推薦的規劃方式,你將在以後的使用中感覺到很舒服。

我們這裏有很多種標準的推薦倉庫組織形式。大多數人會創建一個trunk目錄來存放開發的主線,一個branches目錄來存放支線副本,另外還有一個tags目錄來存放標籤副本。假如一個倉庫只保存一個項目,經常會創建這樣的幾個頂級目錄:

/trunk

/branches

/tags

如果一個倉庫存放多個項目,經常會像下面這樣根據分支來規劃:

/trunk/paint

/trunk/calc

/branches/paint

/branches/calc

/tags/paint

/tags/calc

...或者根據項目分成多個目錄:

/paint/trunk

/paint/branches

/paint/tags

/calc/trunk

/calc/branches

/calc/tags

如果多個項目之間的關係不是很緊密,並且他們都是被單獨取出的,那根據項目來規劃會比較有意義些。

     對不相干的項目來說,你可以使用多個不同的倉庫。當你提交一個改動,版本號會是整個倉庫的版本號,而不是項目的版本號。2個不相干的項目共享一個倉庫會在版本號方面導致極大的不方便。SubversionTortoiseSVN的項目看起來好像在同一個地址,但事實上他們在完全不同的倉庫中研發着,並且在版本號方面完全的不相干。

當然,你可以不管上面提到的這些形式。你可以隨意發揮以滿足你或者你的團隊的需要。記住不管你怎麼選擇,那都不會是一個永久的形式,你可以在任何時候重新組織你的倉庫。因爲branchestags都是很普通的目錄,只要你願意,TortoiseSVN可以隨時移動它們,或改名

從一種形式轉換到另一種形式僅僅需要在服務器端做一些文件或目錄移動操作;如果你不喜歡你倉庫的某種組織形式,儘管大膽的操作那些目錄。

到這裏,如果你還沒有在你的倉庫中創建一個基本的目錄架構,接下來你應該這麼做:

1.    在你的硬盤中創建一個空目錄。

2.    在這個目錄中創建一個你中意的目錄組織形式。注意現在不要放任何文件進去。

3.    接下來把這個結構導入倉庫。在新建的那個目錄上單擊鼠標右鍵,選擇Import…。這樣,就把你剛纔創建的臨時目錄導入到倉庫的根目錄了,並創建了倉庫的基本架構。

注意:你導入的這個目錄的目錄名是不應該出現在倉庫中的,應該只有目錄中的內容會出現。比如,創建下面的目錄結構:

C:/Temp/New/trunk

C:/Temp/New/branches

C:/Temp/New/tags

C:/Temp/New 導入到倉庫的根目錄,那麼根目錄看起來應該是這樣的:

/trunk

/branches

/tags

另外你也可以使用倉庫瀏覽器(repository browser)直接在倉庫中創建新目錄。

3.2.            導入 Import

    在把你的項目導入到倉庫之前,下面的工作必須做好:

1.    把項目中不需要的文件刪除。(臨時文件、編譯器創建的文件,比如*.obj2進制文件等。)

2.    把目錄和子目錄中的所有文件整理一遍。雖然你可以在導入之後再來進行重命名或刪除等操作,但是還是推薦你在導入之前把你的項目整理好。

現在,在資源管理器(windows explorer)中選擇項目的根目錄,單擊鼠標右鍵,選擇Import…命令,跳出一個對話框:

3:導入對話框

    在這個對話框中你需要填寫你要將項目導入倉庫的URL地址。那個Important Message是用來記錄日誌信息的。

    當你按下OK按鈕,TortoiseSVN就開始把整個目錄樹包括所有文件導入到倉庫了。和前面講到的一樣,這個目錄的名字不會出現在倉庫中,只有目錄中的內容會出現。現在,你的這個項目就處於版本控制之下了。請注意,你剛纔導入的這個目錄(在你本地硬盤上的這個)並沒有處於版本控制下!要獲取一份處於版本控制之下的工作副本,你需要對剛導入的版本做一次取出(Checkout)操作。

3.3. 特殊文件Special Files

     有時候你需要版本控制一個存儲着用戶個性信息的文件。也就是說這個文件每個開發者或用戶都會去修改以適應他本地的設置。但每個用戶在進行提交(commit)操作時都會把這個文件的修改提交給倉庫,這就使得版本控制這樣一個文件很困難。

在這種境況下,建議使用模版文件。你可以創建一個包含開發人員需要的所有數據的文件,把它添加到版本控制之下,然後讓開發人員取出這份文件。接下來,每個開發人員就可以給這個文件做個備份,然後給他改個名字。這樣操作之後,不管怎麼修改這個備份都不再是什麼問題了。

例如,你可以看看TortoiseSVN的腳本文件,那是一個叫做TortoiseVars.bat的文件。它不在用戶創建的版本庫中,而只有一個叫做TortoeseVars.tmpl的文件。TortoiseVars.tmpl是一個模板文件,通過它每個開發用戶可以創建一個工作拷貝,並且可對於TortoiseVars.bat重命名那個文件。在文件中,我們可以增加一些內容,用戶可以通過查看這些內容來知道哪一行他們編輯或修改過。

所以,爲了不使用戶麻煩,我們也把TortoiseVars.bat這個文件增加進了父文件夾的忽略列表中。並且設置了Subversion的屬性svn:不包括那個文件。通過這樣,不必讓用戶在每次提交中都顯示未知的版本名稱。

3.4. 參考項目Referenced Projects

     有時候,爲了構建一個工作拷貝,需要經常大量的使用不同的檢出。例如,你可能需要不同的補充指南來自一個版本庫的不同位置或者來自不同的版本庫。 如果你希望每個用戶都使用同一個層,那麼你能定義svn :外部屬性。

     如果你要從/Project1檢出一個工作拷貝到D:/dev/Project1。選擇D:/dev/Project1文件夾,右鍵鼠標並選中菜單中的屬性,出現屬性對話框,選擇subversion選項。在這裏,你可以設置屬性,從組合框中選擇svn的外部屬性,並且在編輯框中輸入重定位的URL。例如:subversion http://svn.collab.net/repos/svn/trunk 這時,單擊設置並且提交修改。

4.取出工作副本Checking Out A Working Copy

爲了獲取一個工作副本,你必須從倉庫中做一次取出(checkout)操作。

在資源管理器中選擇一個你想要存放工作副本的目錄。單擊鼠標右鍵跳出菜單,選擇命令Checkout…,再跳出一個窗口:

                 4:檢出對話框

如果你輸入一個不存在的目錄名,那這個目錄會自動創建

重要信息:

你只能取出到一個空目錄。假如你想要取出到先前導入的原始目錄,Subversion會拋出一個錯誤。你必須取出到另外的一個目錄或者先把原始目錄刪掉。強烈建議您僅取出trunk部分。假如你堅持要取出父目錄,那你有可能就會把你的硬盤塞滿,因爲你將得到整個倉庫的數據(包括項目的每一個branchtag)。

導出Exporting

    有時候你也許需要一份沒有那些.svn目錄的工作副本,比如要建一個源代碼zip壓縮包。TortoiseSVN提供一個導出命令 Export…,可以免除我們自己動手來操作(做一個副本,然後手動刪除所有.svn目錄)。如果你在工作副本中執行這個命令,你可以選擇一個目錄用來存放沒有.svn目錄的乾淨工作副本。同樣,你也可以指定是導出所有文件還是那些被版本控制的文件。

導出的另一種方法是,用鼠標右鍵拖拽一個工作目錄到其他地方,然後選擇Subversion export here 或者 Subversion export all here

5. 獲取狀態信息Getting Status Information

當你在你的工作副本中工作的時候,你經常會需要知道哪些文件被修改過,哪些被增加,哪些被重命名,或者哪些文件是其他人修改和提交的。

5.1. 重載圖標Icon Overlays

5:圖標的重載

在從倉庫中取出工作副本之後,你會發現資源管理器中文件的圖標發生了變化。這就是TortoiseSVN受歡迎的一個原因。TortoiseSVN爲每個文件圖標在原來的基礎上增加了一個叫做覆蓋圖標的東東。覆蓋圖標根據Subversion狀態的不同而顯示不同的圖標。

u      綠色圖標表示這是一個最新取出的工作副本,他的Subversion狀態是normal

u      當你開始編輯一個文件,這個文件的狀態就會變成modified,圖標也會變成紅色圓圈帶一個感嘆號。這樣你就可以輕易的知道自從上次更新以來都有修改過哪些文件,需要提交哪些文件。

u      這個黃色三角符號帶感嘆號,表示在一次update中產生了一個衝突(conflict)。

u      藍色加號意味着這個文件或文件夾已經被計劃加入到版本控制之下。

 

u      紅叉叉表示相應文件或文件夾被計劃刪除(deleted),或者表示文件缺失。

文件夾也有這樣的覆蓋圖標顯示。默認情況下只會顯示文件夾自己的狀態。但你也可以在設置中做一些設置,讓文件夾的圖標遞歸顯示。但這會導致覆蓋圖標顯示緩慢,因此在不太好的機器上或工作副本太大我們都不推薦這樣。

在這樣設置之後,每個文件夾都會顯示爲他下面所有文件的狀態,優先顯示順序爲衝突>修改>正常。這樣你就可以輕鬆的看到一個文件夾是否有衝突或者修改過了。

5.2. 資源管理器中TortoiseSVN的專欄

和重載圖標一樣有用(或更有用)的信息可以顯示在瀏覽器詳細資料視圖方式時的附加欄中。簡單地用鼠標右鍵單擊在其中一列的標題,從菜單中選擇更多將會顯示。 一個對話框將出現在你能指定列和他們的順序的地方,在細節觀察中被顯示出來。 往下移動,直到開始看見svn 檢查您希望顯示的那個並且結束對話通過按OK

5.3. 倉庫狀態Status Of The Repository

6:檢查修改

清楚地知道自己修改了哪些文件以及別人修改提交了哪些文件是很有用的。這就是命令Check For Modifications用的着的地方了。這個對話框顯示出你的工作副本中修改過的每一個文件,沒有在版本控制下的文件也會被顯示出來。點擊Check Repository按鈕,可以檢查倉庫中的改動。在做update之前,你可以這麼做一下,來檢查是否有衝突的可能。

在其中選擇文件或文件夾單擊鼠標右鍵,在菜單中我們可以選擇查看文件的差別,或者把本地的修改取消。TortoiseSVN會從倉庫中自動下載最新的版本來進行比較。

    5.4. 查看區別Viewing Diffs

    我們經常會想要在文件裏面查看哪些地方修改了。你可以先選擇已經修改的文件,單擊鼠標右鍵,選擇TortoiseSVN的命令Diff。然後會打開一個比較查看器,它會對本地的文件和倉庫中最新版本的內容進行詳細的對比。

技巧Tip

不在工作目錄中,或者你有多個版本的文件在一起的時候,你也可以使用比較功能:

在資源管理器中選中你要進行比較的兩個文件(使用Ctrl鍵和鼠標),然後選擇TortoiseSVN的菜單命令Diff。最後被點選的文件(焦點所在的那個,也就被虛線矩形框住的那個)將被認爲是被修改過的那個。

6. 更新工作副本Update Your Working Copy With Changes From Others

                         7:已完成更新的對話框

有時候你想要把別人做的修改融合到自己的本地副本當中。這個把改動從服務器拿到本地的過程就是我們已經知道的updatingUpdating操作可以針對一個文件,或幾個被選擇的文件,或某個目錄中的所有文件。選擇你想要進行update操作的文件和(或)文件夾,單擊鼠標右鍵,在菜單中選擇Update。這時會跳出一個窗口顯示正在update的進程。別人做的修改會合併到你的文件中,而你所做的修改會被保留。Update操作對倉庫是不會產生任何影響的。

進程對話框用不同顏色的文字來表示不同的update動作。

藍色

加入到你的工作副本中的新條目。

深紅

從你的副本中刪除的條目。

綠色

成功將改動合併到本地的條目。

亮紅

合併改動到本地,但是有衝突需要解決。

黑色

所有其它的。

如果你在更新中產生了衝突(當你和別人同時修改了同一個文件的同一行並且改動的不同會發生這種情況),對話框中會用紅色文字顯示出衝突。雙擊對應的行就可以啓動外掛程序來解決衝突。

TortoiseSVN 同時也允許你更新工作副本到一個特定的版本,並不僅僅是最新的版本。這個命令就是Update to Revision…,他會跳出一個對話框來讓你輸入你需要的版本。

7. 解決衝突Resolving Conflicts

有時候,你從倉庫更新文件時會發生一些衝突。當兩個或更多開發人員對同一個文件的某幾行做了修改,就會產生衝突。因爲Subversion對你的項目一無所知,他會把衝突留給開發人員來解決。只要衝突產生了,你就應該打開有問題的文件,然後找到以“<<<<<<<”開頭的那幾行,有衝突的區域會被下面這樣標示:

<<<<<<< filename

    your changes

=======

    code merged from repository

>>>>>>> revision

另外,對每一個有衝突的文件,Subversion都會在你的目錄中放三個另外的文件:

filename.ext.mine

這個文件是更新工作副本之前,衝突文件在你的工作副本中原來的樣子。其中沒有任何衝突標記。

filename.ext.rOLDREV

這個文件是版本號爲OLDREV時的文件。也就是你做修改之前最後一次取出的文件。

filename.ext.rNEWREV

這是你更新時Subversion客戶端從服務器收到的最新版本的文件。他是倉庫的最新版本。

你可以在菜單中選擇Edit Conflict來打開一個合併工具或衝突編輯器,或者用其他編輯器來解決這個衝突。你必須決定這些代碼到底該是什麼樣子,做一些必要的修改,然後保存文件。

然後選擇菜單中的Resolved命令執行,接着提交修改到倉庫。請注意,命令Resolved並沒有真正的解決衝突,它只不過是把filename.ext.mine filename.ext.r*刪除,並允許你提交修改而已。

8. 把你的修改發送到倉庫Sending Your Changes To The Repository

發送你對工作副本的修改就是提交修改。在提交之前,你應該確認你的工作副本是最新的。你可以直接作一次Update操作,或者先Check for Modifications看看在本地或在服務器上哪些文件修改過。

如果你的副本是最新的,並且沒有衝突,你就可以提交你的修改了。選中你想要提交的任意文件或文件夾,然後選擇在菜單中選擇Commit…

 

8:提交對話框

提交對話框會顯示每一個有修改的文件,包括新增的,刪除的,還有沒有版本控制的。如果你不想提交某個有修改的文件,只要不勾選那個文件就好了。如果你要提交某個沒有做版本控制的文件,只要勾選它就可以提交了。

提交文件還是文件夾?

當你提交文件時,提交對話框只顯示你所提中的文件。當你提交文件夾中,提交對話框將自動選擇有改動的文件。如果你忘記了你建立的一個新文件,提交文件夾將使你可以找到它。提交一個文件夾並不意味着每個文件都被標識爲修改過的,它僅僅是通過幫你多做些事從而讓你的生活更滋潤一點。

 

如果你修改的文件是使用了svn:externals從別的版本庫中包含進來的,那麼這些改動不會被自動提交。在文件列表下方的警告符號會告訴你是否出現了這種狀況,工具提示(tooltip)提示了外部文件必須要分開提交。

在提交對話框中雙擊一個有修改的文件,可以啓動外掛的比較工具來顯示修改細節。

在按下OK按鈕之後,會出來一個顯示提交進程的對話框。

                        9:提交進度對話框

這個顯示進程的窗口中採用了不同顏色的文字來表示不同的提交動作。

藍色Blue

提交一個修改的或新的條目。

深紅Dark red

提交一個刪除或覆蓋操作。

黑色Black

其它所有條目。

9. 獲取(修改)文件(目錄)信息Get/Set Information About Files/Directories

對於每次進行修改和提交,你應該有針對性地留下日誌信息。這樣,你就可以在以後方便地看到你都做了什麼,爲什麼這麼做。當然這麼做還是你擁有了開發過程的詳細日誌。

版本日誌對話框可以獲取所有的日誌信息,並將其顯示出來。對話框的視圖分成3個面板。

1.        最上方的面板顯示了版本的列表。這其中包含了日期和時間,以及提交的用戶和日誌信息開頭的部分內容。

2.        以藍色顯示的行表示某些內容被複制到該開發版本中(可能是從一個分支中複製而來)。

3.        中間的面板顯示了被選中的版本的完整的日誌信息。

4.        最下面的面板顯示了被選中版本中都對哪裏文件和文件夾進行了修改。

當然,對話框的作用不止於此——它提供了右鍵菜單,通過它可以獲取更多的項目歷史信息。

                       10:日誌對話框

有幾種途徑可以調出日誌對話框:

1.        從右鍵菜單的TortoiseSVN子菜單中調用

2.        從屬性頁中調用

3.        在更新結束後,從進度對話框中調用。在這裏,日誌對話框只顯示你上一次更新以來的版本變化。

有時你想得到一個文件或文件夾更細節的,比覆蓋圖標更多的信息。你可以在瀏覽器屬性對話框中得到Subversion提供的所有信息。選擇文件或文件夾,然後在菜單中選擇屬性(注意:這個屬性是資源管理器提供的那個菜單中的屬性,不在TortoiseSVN子菜單裏面)。在屬性對話框中TortoiseSVN爲在Subversion控制下的文件或文件夾加入了一個新的屬性頁。

Subversion的屬性頁,你可以看到選中文件或文件夾所有的相關信息。另外你還可以讀到或設置它的subversion屬性。你可以加入你自己的屬性,或者一些在subversion中有特殊含義的屬性。那些以svn:svn:externals就是這樣的屬性。

要設置一個屬性,先在下拉框選擇需要的屬性名,然後在下方的輸入框中鍵入值。那些有多個值得屬性,比如忽略列表,可以分成多行來輸入。單擊Set按鈕來添加屬性到列表中。

如果你要應用一個屬性到一個目錄下的每一個文件和目錄,注意選中Recursive複選框。

如果你要修改一個已存在的屬性,先在列表中選中他,然後就可以修改了。

同樣,要刪除一個已存在的屬性,可以先在列表中選中他,再單擊Remove按鈕。

TortoiseSVN也有一些自己的特殊屬性,他們以tsvn:打頭:

●              tsvn:minlogmsgsize設置了提交時日誌的最小長度。如果你沒有輸入指定長度的信息,是不能提交的。這個功能對你在每一次做提交操作時提醒你寫一些合適的描述信息是很有用的。如果這個屬性沒有設置,或者他的值爲0,那表示不填日誌信息也可以。

●              tsvn:logwidthmarker用在需要有一定格式日誌信息的項目中,日誌信息每行的寬度有限制(常見的是80個字符)。設置這個屬性爲一個非零值,將導致2個現象:出現一個灰色線條指示最寬的寬度,還有,自動換行沒有了。這樣你就能看到自己的文字是不是寫的太長了。注意:這個功能只有在給日誌顯示選擇了固定寬度字體時才能正常工作。

●              tsvn:logtemplate用在一些有日誌格式規範的項目中。這個屬性包含多行的文本,當進行一個commit操作時,這些文本就會自動插入到提交信息窗口中。接下來,你就可以在其中再加入必要的信息。注意:如果你還使用了tsvn:minlogmsgsize屬性,那一定要保證設置的長度比模板中的長,否則你將失去這個保護機制。(Note: if you are also using tsvn:minlogmsgsize, be sure to set the length longer than the template or you will lose the protection mechanism.

●              在提交對話框中,你可以把有改動的文件列表粘貼進來,包括每個文件的狀態(addedmodified,等)。tsvn:logfilelistenglish定義了顯示的文件狀態文字是英文還是本地語言。如果這個屬性沒有設置,默認爲true

●              TortoiseSVN可以使用拼寫檢查模塊,就像OpenOfficeMozilla使用的。如果你安裝了這些東東,這個屬性可以決定使用哪個拼寫檢查模塊,比如你的項目的日誌信息應該用哪種語言來寫。tsvn:projectlanguage設置了日誌信息中拼寫檢查器要使用的語言模塊。在這裏可以找到你的語言要使用的值:MSDN: Language Identifiers

某些tsvn:屬性需要一個true或者false的值。另外,TSVN會懂得把yes當作true,把no當作false

10. Bug跟蹤系統Integration with Bugtracking Systems

    在軟件開發中,修改依賴於一個bug或問題編號是很常見的。bug跟蹤系統的用戶(問題跟蹤者)喜歡在問題跟蹤中將Subversion的修改與一個指定編號聯繫起來。因此很多問題跟蹤者提供了一個預提交鉤子腳本,分析日誌,查找提交相關的bug編號。這稍微有些不可靠,因爲它依賴於用戶寫完全的日誌,預提交鉤子才能正確分析。

TortoiseSVN可以在兩個方面幫助用戶:

1.        當用戶輸入日誌信息時,一個定義良好,包含問題編號,與此提交相關的的行,會自動增加。這樣減少了用戶輸入的問題編號不能比bug跟蹤系統正確分析的風險。或者TortoiseSVN高亮顯示日誌消息中能被問題跟蹤者識別的部分。這樣,用戶就知道日誌消息能被正確解析。

2.        當用戶瀏覽日誌信息,TortoiseSVN在日誌信息中創建指向每個bug標示的鏈接,它可以用瀏覽器打開。

你可以在TortoiseSVN中集成bug跟蹤工具。爲了使用這個特性,你要定義一些以bugtraq:開始的屬性,它們只能在文件夾上設置:

有兩個方法集成TortoiseSVN 和問題跟蹤。一個基於簡單字符串,另一個基於正則表達式。它們的用法是:

bugtraq:url

將這個屬性設置爲你的bug跟蹤工具的地址。它必須編碼並且包含%BUGID%%BUGID%用你輸入的問題編號替換。它允許TortoiseSVN 在日誌對話框中顯示鏈接,於是你可以在察看版本日誌時直接進入bug跟蹤工具。你可以不提供這個屬性,但是這樣TortoiseSVN就不能顯示鏈接了,只能顯示問題編號。例如TortoiseSVN 使用http://issues.tortoisesvn.net/?do=details&id=%BUGID%

bugtraq:warnifnoissue

如果你想TortoiseSVN給出空問題編號的警告,就設置爲 。有效取值是 /如果沒有定義那麼假定爲

在最簡單的方法裏,TortoiseSVN爲用戶顯示了一個單獨的bug ID輸入字段,然後後面預計會追加一個用戶輸入日誌信息的行。

bugtraq:message

這個屬性將問題追蹤系統激活爲輸入框模式如果設置了這個屬性,在擬提交時,TortoiseSVN會提示你輸入問題單號碼。它通常會在日誌信息後面添加一行。必須包含%BUGID%,在提交時會被替換爲問題單號。這確保了你的提交日誌包含了問題單號,保證了單號可以被問題追蹤工具解析,從而與提交關聯。例如TortoiseSVN項目使用Issue : %BUGID%,但是這依賴於你的工具。

bugtraq:append

這個屬性定義了bug-ID。是追加到(true)日誌信息的末尾,還是插入到(false)日誌信息的開始。有效的值包括true/false如果沒有定義,默認是true ,所以現存的項目不會被打破。

bugtraq:label

TortoiseSVN的提交對話框中用來輸入問題單號碼的輸入項,如果沒有設置,將會顯示Bug-ID / Issue-Nr:,要記住窗口不會爲適應標籤而改變大小,所以請保持標籤的小於20-25個字符。

bugtraq:number

如果設置爲true,問題單號文本框只能輸入數字,一個例外是逗號,所以你可以使用逗號分割輸入的多個號碼。合法的值包括true/false 如果沒有設置,默認是true

在使用正則表達式的方法中,TortoiseSVN不會顯示一個單獨的輸入框,而是標記用戶輸入的日誌信息,認爲這些標誌可以被問題追蹤工具識別。這是在用戶編寫日誌信息的時候完成的,這也意味着bug ID可以出現在日誌信息的任何位置!這種方法非常靈活,也是TortoiseSVN項目本身使用的方法。

如果同時設置了bugtraq:messagebugtraq:logregex屬性,日誌正則表達式會優先使用。

設置文件夾的屬性

爲了系統能夠工作,這個屬性必須設置到文件夾上。當你提交文件或文件夾,屬性會從文件夾上讀取。如果沒有發現屬性,TortoiseSVN會向上級查找,直到發現一個沒有版本化的文件夾或根目錄(例如C:/)纔會停止,如果你能夠確定每個用戶只從trunk/檢出,而不是其他目錄,你可以直接在trunk/上使用這個屬性,而不必每個子目錄都設置。如果你不能確定,你必須爲每個子目錄設置這些屬性。一個深級目錄的設置會覆蓋高級目錄(離trunk/更近的)。

對於tsvn:屬性,你只能對於所有子目錄使用遞歸檢查框設置屬性,不能設置文件的屬性。

 

問題追蹤集成並沒有限制在TortoiseSVN,可以用於所有的Subversion客戶端

11. 加入新文件和新目錄Adding New Files And Directories

11未受版本控制的文件之資源管理器上下文菜單

如果在你的開發過程中你創建了新的文件或目錄,那麼你需要把他們加入你的版本控制中。選擇那個文件或目錄並使用TortoiseSVN 添加(Add)

當你添加了指定的文件/目錄到版本控制系統之後,這個文件上會出現一個added標誌,這意味着你得先提交你的工作副本使該文件/目錄對其他開發者來說成爲有效的。添加一個文件/目錄不會not影響版本庫。

更多

你也可以在已經版本化的目錄上使用Add命令。那樣的話,添加對話框會顯示該版本化目錄下所有未版本化的文件。如果你有許多新文件需要一起添加的話,這是很有幫助的。

你可以使用鼠標拖拽的方式從你的工作副本外部添加進文件。

1.        選擇你要添加的文件

2.        拖拽(right-drag)他們到新的工作副本下,鬆開鼠標右鍵。

3.        選擇上下文菜單 SVN 增加文件到工作副本。這些文件會被複制到工作副本,加入版本控制。

12. 忽略文件和目錄Ignoring Files And Directories

11未受版本控制的文件之資源管理器上下文菜單

在很多項目中,有一些文件或目錄是不應該被版本控制影響到的。包括那些編譯器產生的*.obj, *.lst,還有一些存放可執行文件的輸出目錄。當提交修改時,TSVN就會把沒有版本控制的文件列出來,佔滿了提交窗口的文件列表。當然你可以選擇不顯示他們,但這樣可能會把一些需要添加的新加入的源代碼文件漏掉。

避免這個問題的最好辦法就是把這些文件加入項目的忽略列表。這樣他們就不會再在提交窗口中出現了,而真正沒有版本控制的源文件還是會被標記顯示出來。

在沒有版本控制的一個文件上單擊鼠標右鍵,然後在TSVN的菜單中選擇Ignore命令,這時會有一個子菜單出現,可以讓你選擇僅僅是這個文件,或者所有這個擴展名的文件。如果你最開始選中的是多個文件,那就不會有這個子菜單出現,而只能選擇把這些選中的文件或目錄加入忽略列表。

要把一個文件從忽略列表中去掉,必須編輯父目錄的屬性,把文件名從svn:ignore屬性中移除。

全局忽略列表

另一個忽略文件的方法是添加這些文件到global ignore list .他們最大的不同是全局忽略列表是一個客戶端特性。它會作用到 所有的(all)subversion 項目。但只能在pc客戶端使用。在全局儘可能更好的使用svn:ignore特性,因爲他能夠應用到特殊的項目區域,並卻他作用於所有檢出該項目的人。

13. 刪除、重命名、移動Deleting, Renaming And Moving

CVS不一樣,Subversion允許對文件和目錄進行改名和移動操作。因此在TortoiseSVN的子菜單中有刪除和重命名。

               12版本控制文件的菜單瀏覽

如果使用TSVN刪除了一個文件或目錄,這個文件就已經從工作副本中刪除了,並被標記爲刪除狀態。這個文件的父目錄將顯示爲一個“deleted”覆蓋圖標。要恢復這個文件,只需對他的父目錄進行revert操作即可。

如果要在工作副本內移動文件,可以使用鼠標來拖拽:

1  選中要移動的文件或目錄。

2  用鼠標右鍵拖拽他們到工作副本中一個新的目錄。

3  鬆開鼠標右鍵。

4  在跳出的菜單中選擇move files in Subversion to here

如果一個刪除操作不是在版本控制下完成的,比如就像平常刪除文件那樣刪除的。提交時,對話框窗口還是會顯示這些刪除的文件,並讓你把他們從版本控制下刪除。所以如果忘記使用TortoiseSVN來刪除這些文件,這些都不是什麼大不了的問題。

提交父目錄

既然重命名和移動都可以像添加之後又刪除一樣被執行,你必需提交該重命名/移動文件的父目錄,所以重命名/移動的刪除部分將出現在提交對話框中。如果你不提交重命名/移動的已刪除部分,他將保留在倉庫中並且你的同組人將更新該未移除的舊文件。例如,他們將有兩個一老一新的副本。

必須在重命名目錄後而在更改目錄下的任何文件前進行提交,不然你的工作副本就回真的混淆。

找回已刪除的文件或目錄

如果你刪除了洋文件或目錄並已經提交該刪除操作到版本庫,那麼 一個常規的TortoiseSVN → Revert已不能再將其找回。但是該文件或目錄並沒有完全丟失。如果你知道該被刪除文件或目錄的版本(如果不能,使用日誌對話框來查找出來),打開數據倉庫的瀏覽器,並選擇那個版本。然後選擇你刪除的文件或目錄,右鍵並選擇Context Menu → Copy to...作爲目標執行復制操作,然後選擇你的工作副本的路徑。

14. 取消改變Undo Changes

如果要取消對一個文件所做的修改,只需用鼠標右鍵單擊該文件,選擇TSVN子菜單中的revert命令,在跳出的窗口中會顯示你選擇的文件,這時可以再次勾選文件,然後按下OK按鈕就好了。注意這裏所做的取消修改只能返回到該文件上次更新時的狀態。

13恢復對話框

取消已經提交的改變

Revert僅能撤消你本地的變更。他能撤消已經提交的的變更。如果你想撤消所有的包括已經提交到一個特定版本的變更。

15. 修訂日誌窗口Revision Log Dialog

每一次修改和提交,都應該做好日誌記錄。這樣開發過程中就有了一個詳細的記錄,以後便可找出每一個修改是如何修改以及爲什麼這樣修改的。

日誌對話框會顯示所有日誌信息。顯示分成3個部分:

1.最上面部分顯示的是所有被提交的版本列表。顯示有日期時間、提交者、修訂版本號和日誌信息的前面一部分。
用藍色顯示的行表示有某些文件被複制到了這個版本。

2.中間部分顯示的是選中版本的所有日誌信息。

3.底部顯示的是選中版本所做修改的文件和目錄列表。

還不僅僅是這些,對話框中還提供了很多的菜單命令可以使用。

15.1. 調用日誌窗口 Invoking The Log Dialog

                             14:調用日誌窗口

有很多個地方可以調出這個日誌窗口:

1  TortoiseSVN的菜單。

2  從文件的屬性頁。

3  完成update操作之後的窗口。這個窗口將只顯示自上次更新以來有過的版本。

15.2. 獲取附加信息Getting Additional Information

15版本日誌對話框的頂部面板的右鍵菜單

頂部窗格中的右鍵菜單功能如下:

1Compare with working copy 對選中版本與本地副本進行比較。默認的比較工具是TSVN提供的TortoiseMerge。如果是某個目錄的日誌,就會顯示有改動文件的列表,接下來可以選擇單個文件進行改動查看。

2Show Differences as Unified Diff 在一個文件裏面顯示所有的改動。這個操作比上面那個調用外部的比較查看器要快多了,因爲TSVN只需要拿到不同,而不再需要獲取所有的文件。

3.保存選中版本爲一個文件,這樣就可以得到這個文件的一個老版本了。這個選項只有當你選中的版本中只有一個文件被改動時纔有效。

4Browse Repository打開倉庫瀏覽器,檢查選中的目錄。這個選項只有當日志只有一個目錄時纔有效。

5Create tag from Revision 從選中版本創建branchtag。這個功能很有用的。比如當你忘記創建一個tag而已經提交了一些改動,但這些改動你又不想包含到那個版本中去時。

6.更新工作副本到選中版本。當想把工作副本回復到以前的某個狀態,這個選項是很有用的。最好是更新整個目錄而不是隻更新一個文件,否則你的工作副本就會不一致,而且你也將沒辦法提交任何改動。

7.恢復改動到選中版本。這個操作對倉庫沒有一點影響,只會在本地副本中進行改動的恢復。注意,它只取消那個版本的所有改動,沒有用老版本的整個文件來替換你的副本。這在要取消一個以前的改動時很有用。

8.檢索日誌信息。這個功能可以在輸入的日誌信息和Subversion創建的動作摘要中進行查找。注意:大小寫是不敏感的。

16頂部窗格中選中2個文件時的菜單

如果你一次選中兩個版本,菜單就會只剩下三個選項了:

1.用可視化工具來比較選中的2個版本。默認的比較工具是TSVN提供的TMerge。這個功能只對文件有效,對目錄沒用。

2.在一個文件中顯示這2個版本的不同點。這個對文件和目錄都有效。

3.檢索日誌信息。和前面講到的一樣。

17日誌對話框的底部面板的右鍵菜單

底部窗格菜單的作用如下:

1.查看選中文件在那個版本中所作的改動。這個菜單隻有當文件爲Modified時纔有效。

2.保存選中文件的相關版本。

3.查看選中條目的Subversion屬性。

15.3. 獲取所有日誌Getting all log messages

日誌窗口一般不會顯示所有的日誌的:

1.對一個大型倉庫來說,顯示成千上萬的改動需要花太多時間。正常情況下,開發人員只關注最近的修改。默認情況,最多會顯示100條日誌。你也可以在Settings中修改這個值(見第4.21節,“TortoiseSVN的設置)。

2.當查看一個branch或者tag的日誌時,只會顯示創建這個特定branch的目錄到根的日誌。這樣的好處是不會顯示多餘的其他無關的日誌信息。
   
注意這隻對本地副本有效。如果使用倉庫瀏覽器,日誌信息會從分支的地方繼續顯示更多。

如果想得到所有日誌,先回到版本1,再按Get All

15.4. 修改日誌內容和作者Changing the log message and author

有時候需要修改早先輸入的日誌,因爲各種各樣的原因,比如一個拼寫錯誤,或者要改進一些說法等等。另外還有可能需要修改提交修改的作者,比如由於忘記設置認證等等原因。

Subversion允許任意的修改日誌內容或版本作者。但這個功能默認是關閉的,因爲這些修改是不能取消的(這些修改沒有在版本控制之下)。要讓這個功能起作用,必須先設置好pre-revprop-change hook。關於如何設置的細節請查閱SubversionHook Scripts一節。關於如何在Windows環境如何實現hooks請閱讀第3.5“Repository Hooks”

爲服務器配置好必需的hooks之後,就可以修改每個版本的作者和日誌內容了。用TSVN修改的方法是,在先按住SHIFT鍵,再用鼠標雙擊需要修改的作者或日誌欄。如果沒有按住SHIFT鍵,或沒有點擊在這2個欄上,那默認的雙擊動作(顯示選中版本的區別)就會被執行了。

警告

由於Subversion的版本屬性不受版本控制,對於這種屬性的修改( svn:log提交信息屬性將永久覆蓋該屬性之前的值。

15.5. 統計信息Statistical Information

按下統計按鈕(Statistics)會顯示一些關於修訂版本的有趣信息。顯示的內容包括,有多少作者在工作,他們提交了多少內容,每週的進展,等等。

注意,這個統計頁面數據的範圍和前一個界面裏日誌的範圍是一樣的。所以如果只是一個版本的日誌,那這裏的統計信息就不會有太大的意義了。

16. 分支/標記Branching / Tagging

版本控制的一個重要特性是能將變更隔離成獨立的開發線路。這就是所謂的分支(branch)。分支常用來測試新功能,但又不會因爲編譯錯誤或BUG干擾開發主線。一旦分支穩定下來,就可以把分支合併(merge)回主線(the trunk)了。

版本控制的另一個特性是標記特殊版本(比如一個可以發佈的版本),這樣有利於在任何時候重新創建一個特定的build或開發環境。這就是所謂的標記(tagging)。

Subversion沒有什麼專門的命令來branching或者tagging,而使用cheap copies來代替。Cheap copies有點像links(譯者注:就像windows系統的快捷方式),並沒有真正的進行復制操作。

16.1. 創建分支或標記Creating a Branch or Tag

在從副本創建分支或標記前,最好先確保本地與倉庫的版本一致。

如果你是按先前的推薦組織方式存放倉庫的,那創建分支或標記會非常簡單:

18分支/標記對話框

在你當前的工作拷貝中給你你想要拷貝的分支或標記選擇一個目錄,然後選擇命令TortoiseSVN 分支/標記...

默認的目標URL將會是你當前工作拷貝所處的源URL。你必須給你的分支/標記編輯一個新路徑。來取代

    http://svn.collab.net/repos/ProjectName/trunk

你可以使用這樣的設置

    http://svn.collab.net/repos/ProjectName/tags/Release_1.10

如果你忘記了你上一次使用的命名約定,可以用鼠標右鍵打開版本庫瀏覽器來察看已經存在的版本庫結構。

現在你必須選擇要拷貝的源位置。在這裏你有三個設置選項:

1.版本庫中的最新版本

新分支直接從倉庫中的最新版本里拷貝出來。不需要從你的工作副本中傳輸任何數據,這個分支的建立是非常快的。

2.在版本庫中指定具體的版本

在倉庫中直接拷貝建立一個新分支同時你也可以選擇一箇舊版本。假如在你上週發佈了項目時忘記了做標記,這將非常有用。如果你記不起來版本號,通過點擊鼠標右鍵來顯示版本日誌,同時從這裏選取版本號。和上次一樣不需要從你的工作副本中傳輸任何數據,這個分支建立起來是非常快的。

3.工作副本

新的分支是一個完全等同於你的本地工作副本的一個拷貝。如果你更新了一些文件到你的工作副本的某個舊版本里,或者你在本地做出了修改,這些改變將準確無誤的進入拷貝中。自然而然地這種綜合的標記會包含正在從工作副本傳輸到版本庫的數據,如果這些數據還不存在的話。

如果你想把你的工作副本自動切換到最新創建的分支,使用轉換工作拷貝至新分支/標記 選擇框.但是如果你打算這麼做,首先要確認你的工作副本沒有被修改。如果有修改的話,當你轉換後這些修改將會混合進你的工作副本分支裏。

按下確認提交新副本到版本庫中。別忘了提供一條日誌信息。需要注意的是這個副本是在版本庫內部創建的。

需要注意建立一個分支或標記不會影響你的工作副本。即使你拷貝了你的工作副本,這些修改也會提交到新分支裏,而不是到主幹裏,所以你的工作拷貝可能仍然標記爲已修改狀態。

16.2. 取出還是切換To Checkout or to Switch

這是(不是真的)個問題。由於checkout會取出所有的數據,而switch只會傳輸修改的內容。

爲了能夠得到最新的副本進行工作,你可以:

1.再次執行checkout。你可以任意次的取出副本到本地的任意地方。

2.轉換當前副本到新創建的倉庫。只需再對項目的父目錄執行Switch命令。
在下一個窗口輸入剛纔創建的branch地址。選擇Head version。點擊OK。本地副本就切換到新branchtag了。
轉換就像更新一樣,不會丟掉本地的任何修改,而是將未提交修改合併。如果不想這樣,那就在轉換(switch)之前進行提交(commit)操作,或恢復(revert)副本到某個已提交版本(一般都選head版本)。

19 切換對話框

Subversion是不明白tagsbranches的不同的。下面列出幾點區別:

1.標記用於創建項目在一個特殊階段的靜態快照,通常不再用於開發,而分支是用於開發的。這就是先前推薦使用/trunk /branches /tags結構的理由。當然你也可以修改/tags/中的副本,但提交時TortoiseSVN會有警告。

2.如果一個已經標記過的還發布了的版本,還要進行修改,正確的方法是創建一個新的分支,在新分支上做修改,再根據這個分支創建新標記。比如Version_1.0.1

3.如果在副本上修改並提交,則修改只體現在分支上而不是主幹上。

17. 合併Merging

這個方法覆蓋了你已經在分支(或者最新版本)上做出了一個或多個修改,並且你想將這些修改應用到不同分支的情況。

20合併對話框

17.1. 合併指定版本範圍 Merging a Range of Revisions

爲了合併版本,你需要進入接收修改的分支的工作副本,經常是trunk。選擇右鍵菜單TortoiseSVN 合併。

1.在從:域輸入文件夾在分支或標記中的完整URL,它包含了你想應用到工作副本的修改。你也可以點擊...瀏覽版本庫,找到渴望的分支。如果你以前已經從這個分支合併過,可以直接從包含歷史的下拉列表選擇以前使用的URL

2.因爲你要將同一分支的版本範圍合併到工作副本,所以要確保使用 ":" URL 檢查框選中。

3.在從版本域輸入開始版本號。它是在你要執行合併的修改之前的版本號。切記爲了合併,Subversion將會創建一個差異,所以開始點務必準確。 例如,你的日誌象這樣:

版本 註釋

39. Working on MyBranch

38. Working on trunk

37. Working on MyBranch

36. Create branch MyBranch

35. Working on trunk

34. Working on trunk

如果你要將 MyBranch 的修改合併到 trunk,應該選擇36作爲開始版本,而不是象你想的是37。如果你選擇37作爲開始點,那麼差異引擎將會比較結束點與版本37比較,這就丟失了版本37做的修改。如果這聽起來很複雜,不要擔心,在TortoiseSVN中有更簡單的方法 ...

選擇版本範圍最簡單的方法是,點擊顯示日誌,列出最近的修改和日誌。如果你要合併單個版本的修改,直接選取那個版本。如果你要合併多個版本,就選擇範圍(使用通常的Shift-)。點擊確認,就會爲你填寫合併對話框的全部域,開始版本和結束版本。

當選擇了檢查框 使用 "開始:" URL,只有按鈕顯示日誌可用。這是因爲顯示日誌對話框設置了全部開始:和結束:版本。所以你只用上面說的多項選擇方法即可。

如果你已經從這個分支合併了一些修改,希望你在提交日誌中註明最後一個合併的版本號。這時,你可以在工作服本上使用顯示日誌對話框跟蹤日誌。使用最後合併的版本號作爲本次合併的開始版本。例如,你已經合併了版本3739,那麼本次合併你應該從版本39開始。

4.如果你沒有使用顯示日誌對話框顯示版本範圍,那麼你需要手工設置結束版本。在範圍中輸入你想合併的最後一個版本號。這經常是最新版本,儘管它不必是 - 你只想合併單個版本。

如果其他用戶可能提交,那麼要小心使用最新版本。如果有人在你最近更新之後提交了,它指代的版本可能就不是你想的那樣了。

5.點擊合併按鈕完成合並。

現在合併結束。察看合併,看看它是否如預期那樣工作,是個好想法。合併通常很複雜,如果分支與最新版本差別很大,合併經常會出現衝突。

當你已經測試了修改,準備提交時,日誌信息應當總是包含這次合併的版本信息。如果你以後需要執行合併,就需要知道已經合併了什麼,因爲你不想多次合併同一修改。不幸的是,合併信息不會存儲在Subversion版本庫中。

分支管理很重要。如果你要保持這個分支與最新版本同步,你應當經常合併,這樣分支和最新版本的差別就不會太大。當然,你仍舊應該遵循上面的說明,避免重複合併修改。

17.2. 合併兩個不同的目錄樹Merging Two Different Trees

這個用例覆蓋了這種情況,當你象Subversion手冊裏討論的那樣,創建了一個新特性分支。所有最新版本的修改都要每週一次合併到新特性分支,等新特性完成後,你向將它合併到最新版本。因爲你已經保持了新特性分支和最新版本同步,所以除了你在分支做的修改,其它部分在分支和最新版本應該是相同的。於是在這種情況下,你應當用比較分支和最新版本的方法來合併。

爲了將新特性從分支合併到最新版本,你需要進入最新版本的工作副本。在右鍵菜單選擇 TortoiseSVN 合併...

1.在開始:域輸入trunk文件夾的全路徑。這聽起來好象是錯誤的,但是切記 trunk 是你想增加分支修改的開始點。也可以點擊 ...瀏覽版本庫。

2.因爲你在比較兩個不同的樹,確認沒有選擇使用 "開始:" 路徑檢查框。

3.在結束:域輸入關注的分支中文件夾的全路徑。

4.在開始版本和結束版本 域,輸入兩個樹被同步的最後一個版本號。如果你確信沒有其他人提交,兩個都可是輸入 HEAD。如果在同步時可能有人提交的話,使用清楚的版本號以便面丟失最新提交。

你也可以使用顯示日誌選擇版本。注意這種情況下,你不能選擇版本範圍,所以此時你選擇的版本會實際出現在版本域。

5.點擊合併按鈕完成合並。

這種情況下,因爲新特性已經集成到最新版本,你不再需要這個新特性分支。新特性分支變成多餘的,如果需要可以從版本庫刪除它。

18. 創建和應用補丁Creating and Applying Patches

如果誰都可以隨便修改,項目將沒完沒了,永遠沒法穩定下來。怎麼辦呢?通過補丁patch”!將補丁送交給具有寫權限的開發團隊,他們先審查補丁,再決定是否提交,或者打回給作者。

補丁文件只保存有副本與基礎版本的差異。

18.1. 創建補丁Creating a Patch File

首先你需要做出修改並測試這個修改的內容。然後在父目錄上使用TortoiseSVN 創建補丁...代替TortoiseSVN 提交...

21創建補丁的對話框

現在你可以選擇要包含在補丁中的文件了,就像你要做一個完整的提交一樣。這樣會產生一個單一的文件,該文件包括一份自從最後一次從倉庫更新後你對所選擇文件做的全部修改的摘要。

在這一對話框中,縱列和在 檢查修改對話框中的縱列同樣是可以定製的。你可以創建包含對不同文件集合修改的相互獨立的補丁。當然如果你創建了一個補丁文件,對於同一份文件的更多修改會創建另外一個補丁文件,第二份補丁文 件包含了全部的修改。

你可以用一個自己選擇的文件名來保存這個補丁文件,補丁文件可以有任意的擴展名,但是按人一般習慣,人們都是用.patch或者.diff作擴展名,你現在已經做好提交你的補丁文件的準備了。

 

18.2. 應用補丁Applying a Patch File

當你對你的工作拷貝打補丁的時候,你應當在與創建補丁文件時相同的目錄層次上。如果你不能確定在那個目錄層次上,就看一下補丁文件的第一行。例如,如果補丁第一個要處理的文件是doc/source/english/chapter1.xml 並且補丁文件的第一行是Index: english/chapter1.xml說明你必須要對english目錄應用這個補丁文件。儘管如此,倘若你在正確的工作拷貝上工作,如果你選擇了一個錯誤的目錄層次,TSVN會察覺到這個錯誤,並給出正確的建議。

爲了給你的工作拷貝打補丁,你至少需要對代碼庫的讀權限。因爲合併程序必須要參考修訂版本中其他開發人員做的修改。

從那個目錄的上下文菜單,點擊TortoiseSVN 應用補丁... 系統會彈出一個打開文件的對話框,讓你選擇要應用的補丁文件。默認情況下只顯示.patch或者.diff文件,但是你可以選擇"所有文件"

如果補丁文件以.patch 或者 .diff 爲擴展名的話,你可以選擇直接右鍵點擊該補丁文件,選擇TortoiseSVN 應用補丁... 在這種情況下,系統會提示你輸入工作拷貝的位置。

這兩種方法只是提供了做同一件事的不同方式。第一種方法,你先選擇工作拷貝,然後瀏覽補丁文件。第二種方法,你先選擇補丁文件,然後瀏覽工作拷貝。

一旦你選定了補丁文件和工作拷貝的位置,TortoiseMerge就會把布丁文件合併到你的工作拷貝中。系統會彈出一個小窗口列出所有被更改了的文件。依次雙擊每一個文件,檢查所做的改變,然後保存合併後的文件。遠程開發者的補丁現在已經應用到了你的工作拷貝上,你需要提交它以使每一個人都可以從代碼庫訪問到這些修改。

遠程開發者的補丁現在已經應用到了你的工作拷貝上,你需要提交它以使每一個人都可以從代碼庫訪問到這些修改。

19. 副本重定位Relocating a working copy

22重定位對話框

如果你的版本庫因爲某些原因而重定位了(IP/URL).也許你不能進行操作,不能提交,不能從新的定位檢出拷貝,也不能將修改的數據提交到新位置的版本庫中,TortoiseSVN 重新定位也許正是你需要的。它的做法很簡單: 查找所有 .svn 文件的接口然後把URL值改爲新的版本庫地址。

警告

這是一個極少使用的操作.重定位只能 在版本庫路徑更改時使用。可能的原因是:

  • 服務器的IP地址已更改。

  • 協議已更改(比如從http://改爲 https://)

  • 版本庫在服務器的路徑已更改。

換種說法,如果你要重定位,只有當你的工作拷貝仍然還在同一個版本庫中定位,但版本庫本身已經沒有了。

以下情況不支持:

  • 你要移到一個完全不同的版本庫。這種情況下,你必須從新的版本庫裏執行一次乾淨的檢出。

  • 你要在同一個版本庫中切換一個分支或目錄。這麼做你可以用TortoiseSVN → 切換....

如果你使用以上任意一種重定位方式,它將破壞你的工作拷貝,在你更新、提交等操作時會提示一些令人費解的錯誤信息。一旦發生這種情況,唯一的辦法就是檢出最新版本。

20. 倉庫瀏覽器The Repository Browser

有時候我們需要在版本庫中直接進行操作,而不是在工作拷貝中。這就是我們的版本庫瀏覽器可以做到的。正如資源管理器和能瀏覽你的工作拷貝一樣,版本庫瀏覽器允許你瀏覽版本庫的結構和狀態。

23:版本庫瀏覽器

在版本庫瀏覽器中你可以執行比如拷貝,轉移,重命名、、、直接操作在版本庫上。

在版本庫瀏覽器窗口的頂端輸入版本庫的URL地址和你要瀏覽的版本號。瀏覽一個歷史版本對一些操作比如覆蓋以前刪除的文件是很有用的。用右鍵菜單 拷貝到...輸入你要覆蓋的被刪除文件的工作地址就能做到。

主瀏覽窗和其他任意目錄樹瀏覽器一樣。你可以點擊頂部的列表頭來調整排列順序。如果你右擊文件 置前轉換按數字順序排序可以實現。這個要比無格式二進制處理數字排序要智能多了,對在隊列中獲得版本標籤也很有用。這種默認狀態在設置對話框中可以設置。

如果你選擇兩個版本,你可以以單一差異文件顯示修改,或者可以使用自帶的比較工具清晰地顯示整個列表的差異。這個對比較兩個日誌信息的修改很適用。

如果你選擇兩個擁有相同歷史的標籤(特別是/主幹/),你可以使用右鍵菜單 顯示日誌...來查看

你也可以在版本庫瀏覽器中使用拖拽的操作。如果你把一個文件夾從資源管理器中拖拽到版本庫瀏覽器中,那就實現該文件夾的導入功能。有一點要注意,在導入多個文件時,必須分開一個一個地拖進去。

如果要在版本庫瀏覽器中移動一個文件,只用左鍵拖到它要去的位置。如果你更願意去拷貝該文件的話,使用這個按住左鍵拖 。操作就像在資源管理器中一樣,拷貝時指針“加” 來標記。

如果你要拷貝/移動一個文件或文件夾到一個新的位置並重命名,你可以右鍵拖 或者 按住右鍵拖這個文件,而不用左鍵拖。這樣,就會顯示對話框來爲該文件或文件夾重命名。

無論什麼時候對版本庫的任意操作,都要求加入它的操作日誌。這爲你操作失誤提供了返回的機會。

有時候當你訪問一個路徑時,會跳出一個錯誤信息。也許是不可用的URL,也許是你沒有訪問權限,或者其他的一些原因,如果你要把這些信息發送出去,只用點擊它然後右鍵 複製錯誤信息到剪貼板,或者簡單地用CTRL+C

21. TSVN的設置TortoiseSVN's Settings

21.1. 般設置

24設置對話框,常規設置頁面

這個對話框允許你指定自己喜歡的語言,同時也可做那些與Subversion相關的特殊設置。

語言

選擇你TSVN的用戶界面語言。不然你還期望從這裏得到啥別的?

每週自動檢查新版本

如果檢查過,TSVN將每週聯繫它的下載站點一次,來看看程序是否有個可用的新版本。若你想馬上得到結果,使用 立即檢查 按鈕。無論如何,新版本不會被自動下載,而只是你將收到一條提示信息對話框,告訴你有新版本可用。

系統聲音

TSVN已經默認安裝了三個自定義聲音。

·   錯誤

·   提示

·   警告

你可以使用Windows控制面板中的聲音屬性,來選擇不同的聲音(或是把這些聲音完全關掉)。配置 按鈕是一個打開控制面板聲音屬性的快捷方式。

全局忽略樣式

全局忽略樣式被用來防止非版本控制的文件在例如提交時的對話框中被列出來。那些符合樣式的文件,在執行導入操作時將同樣被忽略掉。通過在樣式框中輸入文件名或擴展名來忽略文件或文件夾。不同的樣式之間將以空格分隔,例如 */bin */obj *.bak *.~?? *.jar *.[Tt]mp。例子中前兩個條目表示文件夾,其他四個表示文件。這些樣式將採用文件名模糊匹配的方式來匹配要忽略的文件。

小心

如果你象下面段落那樣使用Subversion配置文件來設置一個 全局-忽略 樣式,那麼它將覆蓋你在這裏做的設置。該Subversion配置文件可以象下面段落描述的那樣,通過 編輯 按鈕來訪問。

忽略樣式將作用於你所有的項目工程。因爲它是非版本控制的,所以它將不會對其他的用戶起作用。相對而言,你也可以使用可版本控制的 svn:ignore 屬性來把要忽略的文件或文件夾排斥在版本控制之外。閱讀  5.11  “忽略文件和目錄” 以獲得更多信息。

將文件日期設置爲“最後提交時間”

該選項通知TSVN在做檢出或更新操作時,把文件日期設置爲最後提交的時間。否則TSVN將使用當前日期。如果你在做軟件開發的話,使用當前日期是總體上最好的選擇,因爲那些軟件構建器通常通過查看時間戳來決定需要編譯哪些文件。如果你使用了“最後提交時間”並把代碼文件還原到了一箇舊版本,你的工程可能就不會像你期望的那樣被編譯了。

Subversion配置文件

使用 編輯 按鈕來直接編譯Subversion配置文件。有些設置不能被TSVN直接修改,就需要在這裏完成。值得注意的是,Subversion可以從許多不同的位置讀取配置信息,因此你也就需要了解哪一個將優先起作用。

使用“_svn”目錄替代“.svn”目錄

在使用VS.NET環境做web工程時,將無法處理 .svn 文件夾,但Subversion是要用這些文件夾來儲存自己的內部信息的。這可不是Subversionbug,這bugVS.NET和它使用的frontpage擴展帶來的。若你想改變SubversionTSVN的這些行爲,就可以使用這個選項框來設置控制這些的環境變量。

你應該注意到:改變該選項將不會使已存在的工作拷貝中的管理文件夾從“_svn”自動轉換到“.svn”。你需要使用一個腳本(查看我們的FAQ)來自行完成這項工作,或是簡單地重新檢出一個新的工作拷貝。

 

21.2. 外觀與樣式設置

25設置對話框,外觀與樣式頁面

該頁面允許你指定:在TortoiseSVN的主上下文菜單中哪些條目可以直接在鼠標右鍵菜單顯示,哪些在TortoiseSVN子菜單顯示。默認情況下很多項未被勾選,只在子菜單顯示。

獲得鎖會有一個特別的情況,你可以將其提升到頂級帶但,但是大多數文件不需要鎖定,這樣做只是添加了混亂。然而,一個標記爲svn:needs-lock屬性的文件每次編輯前都需要那個操作,所以這個菜單會進入頂級菜單會比較方便。選定這個選項,會使設置svn:needs-lock屬性的文件的Get Lock出現在頂級菜單中。

如果在你的工作拷貝下有大量的文件,那麼你 右鍵點擊 該文件夾的時候將花費較長的時間使上下文菜單顯示出來。這是因爲在你查詢文件夾狀態的時候,Subversion要去獲取其下所有文件的狀態。你可以在這裏取消對 爲右鍵菜單獲取SVN狀態 選項的勾選以避免這種延遲。要注意的是,文件夾的上下文菜單有時不太正確,可能會包含一些本來不該在那兒的條目。舉個例子,右鍵點擊一個新 添加 的文件夾,你可能會看到 TortoiseSVN 顯示日誌 的操作選項,但那個是不會起作用的,因爲該文件夾還沒真正提交到版本庫裏。

選項 使用頂級菜單的快捷鍵 有三種狀態:

未勾選(默認)

這種狀態下,菜單項全部是由TSVN畫出的,不會顯示任何快捷鍵。

已勾選

這種狀態激活了TSVN命令的快捷鍵,但這些與瀏覽器右鍵菜單中的其他快捷鍵顯然存在起衝突的可能。多次按下快捷鍵將循環匹配右鍵菜單中共享同個快捷鍵的條目。這種狀態下,菜單項是被Windows畫出來的,而且看上去醜的要命。

半勾選(灰色)

這種模式下快捷鍵被激活,同時菜單項將以純文本的形式被畫出,不顯示任何圖標。

21.3. 網絡設置

如果你需要對每個版本庫建立一套代理設置,你必須使用Subversion服務器文件來配置。使用編輯來直接訪問該配置文件(servers.txt)

你同樣可以在此指定SSH客戶端程序,用來支持TortoiseSVN同使用svn+ssh協議的版本庫建立安全連接。我們推薦您使用TortoisePlink.exe。這是著名的Plink程序的一個定製版本, 並且業已包含在TortoiseSVN之中,但它被編譯成了一個無窗口的應用,因此當你每次認證的時候將不會看到彈出的DOS窗口。

這裏有個不彈出窗口的副作用:將沒有什麼錯誤信息可供你追蹤。因此倘若認證失敗你將得到一個信息說:“Unable to write to standard output”。這樣一來,我們就推薦你第一次設置時使用原始的Plink程序;而當一切工作正常之時,再使用定製版的TortoisePlink,並且重複利用那些相同的參數。

21.4. 比較/合併設置

26 高級差異比較設置/高級合併設置的對話框

在高級設置中,你可以爲每種文件類型都定義一個不同的差異比較/合併程序。例如,你可以指定Photoshop作爲.jpg文件的 “比較” 程序 :-) 也可以按照 svn:mime-type 屬性指定差異/合併程序。

無需任何通配符,你僅需指定文件的擴展名,包含開始的點,但是沒有任何通配符。使用 .BMP 來描述Windows位圖文件,而 不是*.BMP。如果使用svn:mime-type屬性,要指定多媒體文件類型,包含斜線,例如text/xml

22. 誰動了哪一行Who Changed Which Line

有時你不僅要知道哪一行做了修改,還要精確地知道誰修改了一個文件中的哪一行。這就是TortoiseSVN 追溯...命令,有時候也叫做 評註命令派上用場的時候了。

對一個文件中的每一行,這個命令列出了作者和該行修改時的版本。

27評註/追溯對話框

如果對早期版本的修改不感興趣,你可以設置從哪個版本開始追溯。如果你想追溯每一個版本,你可以把那個數值設置爲1

默認情況下,追溯文件使用TortoiseBlame,這個工具可以高亮顯示不同版本從而使閱讀更加容易。如果想打印或者編輯追溯文件,複選使用文字編輯器查看追溯信息。

一旦你按了 OK 按鈕,TortoiseSVN就開始從版本庫獲取數據創建追溯文件。注意:視修改的文件的多少和你的網絡連接情況,可能會花掉幾分鐘到幾十分鐘不等。追溯過程完成後,其結果將會寫到一個臨時文件中,你可以讀到這個結果文件。

28TortoiseBlame

TortoiseBlame,包含在TortoiseSVN,使得追溯文件更加容易閱讀。當你的鼠標在追溯信息列的某一行上盤旋時,所有和該列具有相同版本號的行都會用一個比較暗的背景色顯示。同一作者修改的其他版本的行會用一個亮一些的背景 色顯示。如果你的顯示設置爲256色模式,那麼顏色顯示的可能不會很清楚。

如果在某一行上左擊,具有同一版本號的所有行都會高亮顯示,同一作者的其他版本的行會用一個更亮的顏色高亮顯示。這個高亮具有粘性,也就是說允許你移動鼠標但原先高亮的地方仍然保持高亮。再次點擊該版本將關閉高亮顯示。

只要鼠標逗留在追溯信息列,版本註釋(日誌信息)就會作爲提示出現。如果你想複製此版本的日誌信息,使用在追溯信息列顯示的右鍵菜單。

你可以在追溯報告裏用編輯 查找...來搜索想要的內容。它允許你搜索版本號,作者還有文件的內容。這個搜索不包含日誌信息-你可以在日誌對話框裏搜索日誌信息。

你也可以使用 編輯 轉到行 ... 來跳到指定行。

23. 版本路線圖Revision Graphs

29:版本分支圖

有時候,我們需要知道從哪開始有了分支和標籤,同時想知道這條支路是單獨的分支還是樹型結構。如果需要你可以使用TortoiseSVN 版本分支圖...

這個版本歷史分析圖能夠顯示分支/標籤從什麼地方開始創建,以及什麼時候刪除。

重要

要實現版本分支圖,TortoiseSVN必須從版本庫中獲取所有的日誌信息。一個有上千版本號的版本庫會需要幾分鐘的時間,這個主要有服務器速度,網絡帶寬等因素決定。如果你使用的是Apache的方式而且版本號超過300000的話估計要等上比較長的時間了。

版本分支圖將顯示以下內容:

增加文件/文件夾

已增加或通過拷貝生成的文件/文件夾以圓圈的方式標記。

已刪除文件/文件夾

已刪除文件,比如說一個不在需要的分支,將顯示octagon(rectangle with corners cut off)

分支最新版本

當一個分支(或者主幹或者標籤)從最新的節點開始以來有了新的更改,將有一個插件顯示出來。也就是說,任意分支的最新版本都會顯示在分支圖上。

一般的文件/文件夾

其他一般的文件用plain rectangle標示。

默認的分支信息只會顯示那些有增加或刪除文件的節點。要顯示一個項目的所有版本將會產生一個龐大的毫無價值的版本圖。如果你呀看到所有的版本,在視圖工具欄裏可以找到實現該功能的選項。

這也有一個功能來排列版本分支旁支。它根據日誌來對分支排序。如果分支從拷貝創建後都沒有修改過一般被認爲是一個標籤而獨立保存起來。每個分支(創建後有過修改的)會有它們自己的列,所以你可以看到分支延展到什麼情況了。

任何時候只要鼠標在版本框上滑過,都會顯示該版本的日期、作者和備註信息。

選擇兩個版本(用ctrl+左擊),你可以在右鍵菜單下查看這兩個版本的差異。你可以在分支的起始點查看差異,但一般你會在一個分支的結束點來查看,比如,在最新版本。

你可以用查看單一差異文件的方式來查看差異,它在單一的文件中顯示差異。如果你選右鍵菜單 比較版本所有修改過的文件都會呈現在列表中。雙擊一個文件名可以返回文件版本號和他們差異。

如果右擊一個版本你可以使用右鍵菜單 顯示日誌 來查看它的歷史。

小心

因爲Subversion不能支持提供所有請求的信息,在有大量請求信息時,有時它能提供強大的返回信息。但無論如何,主幹都會產生有用的輸出。

 

 
發佈了43 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章