[No000094]SVN學習筆記4-版本庫概念與部分日常操作


基本概念

版本庫

Subversion 使用集中的數據庫,它包含了所有的版本控制文件及其完整歷史。這個數據庫就是版本庫。版本庫通常位於運行 Subversion 服務器的文件服務器上,向 Subversion 客戶端(例如TortoiseSVN)提供需要的數據。如果只備份一個東西,請備份版本庫,因為它是你數據的主副本。

Subversion 是一種集中的分享信息的系統,它的核心是版本庫,儲存所有的數據,版本庫按照文件樹形式儲存數據-包括文件和目錄,任意數量的客戶端可以連接到版本庫,讀寫這些文件。通過寫數據,別人可以看到這些信息;通過讀數據,可以看到別人的修改。

一個典型的客戶/服務器系統

實際上,版本庫是另一種文件服務器,而不是你常見的那一種。最特別的是 Subversion 會記錄每一次的更改,不僅針對文件也包括目錄本身,包括增加、刪除和重新組織文件和目錄。

工作副本

這是實際工作的地方。每一個開發者在自己的電腦上都有屬於自己的工作副本,有時可以將其理解為沙箱。你可以將最新的版本從版本庫上取下來,在本地的副本上工作而不影響其他人,如果對更改滿意就可以將其提交到版本庫中。

Subversion 工作副本不包含項目的歷史,但是它保存了你修改前的本件的副本,就像這些文件在版本庫中的狀態一樣。這意味着你可以輕而易舉的准確檢查出都做了哪些改動。

添加更多的文件

右鍵單擊文件夾然后選擇 TortoiseSVN 增加。加入對話框顯示了所有未被版本控制的文件,你可以選擇哪些文件要被添加。另一個增加文件的方法是右鍵單擊文件自身然后選擇 TortoiseSVN 加入。

現在當你提交文件夾時,新文件會顯示為增加,原有的文件顯示為修改。注意你可以雙擊修改的文件查看做了哪些改動。

文件共享的問題

鎖定-修改-解鎖 方案

在這種系統中,在同一時間版本庫只允許一個用戶修改一個文件。

鎖定-修改-解鎖模型有一點問題就是限制太多,經常會成為用戶的障礙:

鎖定可能導致管理問題。有時候 Harry 會鎖住文件然后忘了此事,這就是說 Sally 一直等待解鎖來編輯這些文件,她在這里僵住了。然后 Harry 去旅行了,現在 Sally 只好去找管理員放開鎖,這種情況會導致不必要的耽擱和時間浪費。

鎖定可能導致不必要的線性化開發。如果 Harry 編輯一個文件的開始,Sally 想編輯同一個文件的結尾,這種修改不會沖突,設想修改可以正確的合並到一起,他們可以輕松的並行工作而沒有太多的壞處,沒有必要讓他們輪流工作。

鎖定可能導致錯誤的安全狀態。假設 Harry 鎖定和編輯一個文件 A,同時 Sally 鎖定並編輯文件 B,如果 A B 互相依賴,這種變化是必須同時作的,這樣 A B 不能正確的工作了,鎖定機制對防止此類問題將無能為力—從而產生了一種處於安全狀態的假相。很容易想象 Harry Sally 都以為自己鎖住了文件,而且從一個安全,孤立的情況開始工作,因而沒有盡早發現他們不匹配的修改。

復制-修改-合並 方案

復制-修改-合並方案

但是如果 Sally Harry 的修改重疊了該怎么辦?這種情況叫做沖突,這通常不是個大問題,當Harry 告訴他的客戶端去合並版本庫的最新修改到自己的工作副本時,他的文件 A 就會處於沖突狀態: 他可以看到一對沖突的修改集,並手工的選擇保留一組修改。需要注意的是軟件不能自動的解決沖突,只有人可以理解並作出智能的選擇,一旦 Harry 手工的解決了沖突(也許需要與 Sally 討論),他就可以安全的把合並的文件保存到版本庫。

最后,一切都要歸結到一條重要的因素: 用戶交流。當用戶交流貧乏,語法和語義的沖突就會增加,沒有系統可以強制用戶完美的交流,沒有系統可以檢測語義上的沖突,所以沒有任何證據能夠承諾鎖定系統可以防止沖突,實踐中,鎖定除了約束了生產力,並沒有做什么事。

有一種情況下鎖定-修改-解鎖模型會更好,也就是你有不可合並的文件,例如你的版本庫包含了圖片,兩個人同時編輯這個文件,沒有辦法將這兩個修改合並,Harry Sally 會丟失他們的修改。

一個 Subversion 工作副本是你本地機器一個普通的目錄,保存着一些文件,你可以任意的編輯文件,而且如果是源代碼文件,你可以像平常一樣編譯,你的工作副本是你的私有工作區,在你明確的做了特定操作之前,Subversion 不會把你的修改與其他人的合並,也不會把你的修改展示給別人。當對工作副本中的文件做了一些更改並確認他們能夠正常工作后,Subversion 提供將這些更改公布給同項目的其他人員的命令(通過寫入版本庫)。如果其他人公布他們的更改,Subversion 提供將這些更改合並到工作副本的命令(通過讀取本版本庫)

svn commit 操作可以作為一個原子事務操作發布任意數量文件和目錄的修改。在你的工作副本中,你可以改變文件內容,創建、刪除、改名和復制文件和目錄,然后作為一個整體提交。

在版本庫中,每次提交被當作一次原子事務操作: 要么所有的改變發生,要么都不發生,Subversion努力保持原子性以應對程序錯誤、系統錯誤、網絡問題和其他用戶行為。

每當版本庫接受了一個提交,文件系統進入了一個新的狀態,叫做版本,每個版本被賦予一個獨一無二的自然數,一個比一個大,初始修訂號是 0,只創建了一個空目錄,沒有任何內容。

可以形象的把版本庫看作一系列樹,想象有一組版本號,從 0 開始,從左到右,每一個修訂號有一個目錄樹掛在它下面,每一個樹好像是一次提交后的版本庫"快照"。

全局版本號

需要特別注意的是,工作副本並不一定對應版本庫中的單一版本,他們可能包含多個版本的文件。

工作副本怎樣跟蹤版本庫

對於工作副本的每一個文件Subversion 在管理目錄 .svn/ 記錄兩項關鍵的信息:

what revision your working file is based on (this is called the file's working revision)

一個本地副本最后更新的時間戳。

給定這些信息,通過與版本庫通訊,Subversion 可以告訴我們工作文件是處與如下四種狀態的那一種:

未修改且是當前的

文件在工作目錄里沒有修改,在工作版本之后沒有修改提交到版本庫。svn commit 操作不做任何事情,svn update 不做任何事情。

本地已修改且是當前的

工作副本已經修改,從基准版本之后沒有修改提交到版本庫。本地修改沒有提交,因此 commit 會成功的提交,update 不做任何事情。

本地未修改且過時

這個文件在工作副本沒有修改,但在版本庫中已經修改了。這個文件應當更新到最新公共版本。commit 不做任何事情,update 將會更新工作副本到最新的版本。

本地已修改且過時

這個文件在工作副本和版本庫中都被修改了。提交該文件將會因為過時而失敗。該文件應該先更新; 更新命令將會嘗試合並公共更改和本機更改。如果 Subversion 不能順利的自動完成合並,則需要用戶解決沖突。

在本地建立一個本地版本庫存儲空間(只適用於一個開發者,或者多人通過網絡磁盤共享訪問)

使用命令行工具創建(本地)版本庫

創建一個名為SVN(例如D:\SVN\)的空文件夾,作為你的所有版本庫的根。

1.D:\SVN\里創建另一個目錄MyNewRepository

2.Open the command prompt (or DOS-Box), change into D:\SVN\ and type

svnadmin create --fs-type fsfs MyNewRepository

現在你在D:\SVN\MyNewRepository創建了一個新的版本庫。

使用 TortoiseSVN 創建(本地)版本庫

1. 打開資源管理器

2. 創建一個新的文件夾,命名為SVNRepository

3. 右鍵單擊新建的文件夾並選擇 TortoiseSVN 在此創建版本庫(Create repository here)...

然后就會在新文件夾創建一個版本庫,不要手工編輯這些文件!!!如果你得到什么警告,一定要先確定目錄非空並且沒有寫保護。

TortoiseSVN 將會在創建版本庫時為其設置一個特定的文件夾圖標,便於辨別本地版本庫。如果使用官方的命令行客戶端創建版本庫則不會設置文件夾圖標。

We also recommend that you don't use file:// access at all, apart from local testing purposes. Using a server is more secure and more reliable for all but single-developer use.

本地訪問版本庫

  • 為了訪問本地版本庫,你需要這個文件夾的路徑,只要記住Subversion期望所有的版本庫路徑使用的形式為file:///C:/SVNRepository/,請注意全部使用的是斜杠。
  • 為了訪問網絡共享中的版本庫,你可以使用驅動器影射或使用UNC路徑,對於UNC路徑,形式為file://ServerName/path/to/repos/,請注意這里前面只有兩個斜杠。
  • SVN 1.2之前,UNC路徑曾經是一種非常晦澀的格式file:///\ServerName/path/to/repos,這種格式依然支持,但不推薦。

訪問網絡共享磁盤上的版本庫

Although in theory it is possible to put a FSFS repository on a network share and have multiple users access it using file:// protocol, this is most definitely not recommended. In fact we would strongly discourage it, and do not support such use for various reasons:

首先,這樣賦予所有用戶對版本庫的寫權限,所以任何一個用戶都可能意外的刪除整個版本庫,或者因為別的問題導致版本庫不可用。

其次,不是所有的網絡文件共享協議都支持 Subversion 需要的文件鎖定,所以你會發現你的版本庫被毀了。它也許不會馬上發生,但是總有一天會有 2 個用戶同時訪問版本庫。

第三,文件的權限必需設置得井井有條。也許 Windows 的共享可以避開這個問題,但是在 SAMBA(一種文件共享協議)中卻是相當困難的。

If one person installs a newer version of the client which upgrades the repository format, then everyone else will be unable to access the repository until they also upgrade to the new client version.

file:// 訪問是為本機工作而准備的,只能單用戶訪問,特別是測試和調試。當你打算共享版本庫的時候,你真的需要設置一個適當的服務器,而且它並不像你想象的那樣困難。

版本庫布局

在將你的數據導入到版本庫之前,首先你得考慮如何組織你的數據。如果你使用一種推薦的布局,你在后面的操作將會更容易許多。

有一些標准的,推薦使用的組織版本庫結構的方法。大多數人創建一個 trunk 目錄掌管開發的 "主干",一個 branches 目錄存放分支副本,以及一個 tags 目錄存放標記副本。如果一個版本庫只掌管一個項目,那么人們通常創建這些頂級目錄:

/trunk

/branches

/tags

因為這個布局非常通用,所以當使用 TortoiseSVN 創建版本庫時,它會提出幫你創建這個目錄結構。

如果一個版本庫包含多個項目,人們通常按分支來安排布局:

/trunk/paint

/trunk/calc

/branches/paint

/branches/calc

/tags/paint

/tags/calc

……或者按項目:

/paint/trunk

/paint/branches

/paint/tags

/calc/trunk

/calc/branches

/calc/tags

如果項目不是密切相關,而且每一個是單獨被檢出,那么按項目布局是合理的。對於那些你想一次檢出所有項目,或需要將它們打成一個分發包的相關項目,按分支來布局通常比較好。這種方式你只要檢出一個分支,而且子項目之間的關系也比較清楚。

 

如果你采用頂層/trunk /tags /branches這種方式,並不意味着你必須復制整個主線為分支或標簽,而且某些情況下這種結構更具靈活性。

 

對於不相關的項目,你可能更願意使用不同的版本庫。當你提交時,改變的是整個版本庫的修訂號,而不是項目的。讓兩個不相關的項目共用一個版本庫,會導致修訂號出現較大的跳躍。SubversionTortoiseSVN項目看起來是在同一個主機地址,但是它們是在完全獨立的版本庫中開發着,並且版本號也不相干。

 

當然,你完全可以不理會上面提及的通用布局。你可以自由改變,來滿足你和你團隊的需要。請記住,不管你選擇哪種布局,它都不是永久的。你可以在隨時重新組織你的版本庫。因為分支和標簽是普通的目錄,只要你願意,TortoiseSVN 可以將它們移動或重命名。

 

從一種布局轉換到另一種布局僅僅是在服務器端移動一些文件或目錄;如果你不喜歡版本庫的組織形式,僅管大膽地修改那些目錄。

 

因此,如果你還沒有在版本庫中創建基本的文件夾結構,你應該立刻創建。創建文件夾有 2 種方法

如果你只想創建一個 /trunk /tags /branches 結構,你可以使用版本庫瀏覽器創建這 3 個文件夾(獨立的 3 次提交)。如果你想創建一個層次更深的結構,那么更簡單的做法是先在硬盤中創建好文件夾結構,然后將其導入(只有 1 次提交),就像這樣:

1. 在你的硬盤上創建一個空的文件夾

2. 在那個文件夾下創建你想要的頂級目錄--千萬不要放任何文件進去!

3. 將這個結構導入版本庫中,只需右鍵單擊包含這個結構的文件夾並選擇 TortoiseSVN 導入...。在導入對話框中輸入版本庫的 URL 並單擊確定。這樣就會將臨時文件夾導入版本庫中創建基本布局。

Note that the name of the folder you are importing does not appear in the repository, only its contents. For example, create the following folder structure:

C:\Temp\New\trunk

C:\Temp\New\branches

C:\Temp\New\tags

 

Import C:\Temp\New into the repository root, which will then look like this:

/trunk

/branches

/tags

右鍵導入的文件夾是作為遠程版本庫的根目錄。

版本庫備份

無論你使用何種版本庫,定期維護和驗證版本庫備份非常重要,或許你可以訪問最近版本的文件,但是如果沒有版本庫,所有的歷史將會丟失。

The simplest (but not recommended) way is just to copy the repository folder onto the backup medium. However, you have to be absolutely sure that no process is accessing the data. In this context, access means any access at all. If your repository is accessed at all during the copy, (web browser left open, WebSVN, etc.) the backup will be worthless.(備份期間,不能有連接訪問版本庫)

The recommended method is to run (熱備份)

svnadmin hotcopy path/to/repository path/to/backup

to create a copy of your repository in a safe manner. Then backup the copy.

The svnadmin tool is installed automatically when you install the Subversion command line client. The easiest way to get this is to check the option to include the command line tools when installing TortoiseSVN, but if you prefer you can download the latest version of command line tools directly from the Subversion [http://subversion.apache.org/packages.html#windows] website.

服務器端鈎子腳本

A hook script is a program triggered by some repository event, such as the creation of a new revision or the modification of an unversioned property. Each hook is handed enough information to tell what that event is, what target(s) it's operating on, and the username of the person who triggered the event. Depending on the hook's output or return status, the hook program may continue the action, stop it, or suspend it in some way. Please refer to the chapter on Hook Scripts [http://svnbook.red-bean.com/en/1.8/svn.reposadmin.create.html#svn.reposadmin.create.hooks] in the ubversion Book for full details about the hooks which are implemented.

這些鈎子腳本被版本庫所在的服務器執行。TortoiseSVN 也允許你配置由確定事件觸發,在本地執行的客戶端腳本

Sample hook scripts can be found in the hooks directory of the repository. These sample scripts are suitable for Unix/Linux servers but need to be modified if your server is Windows based. The hook can be a batch file or an executable. The sample below shows a batch file which might be used to implement a pre-revprop-change hook.(版本屬性修改之前觸發的腳本)

rem Only allow log messages to be changed.

if "%4" == "svn:log" exit 0

echo Property '%4' cannot be changed >&2

exit 1

Note that anything sent to stdout(標准輸出界面cmd界面) is discarded. If you want a message to appear in the Commit Reject dialog you must send it to stderr(標准錯誤). In a batch file this is achieved using >&2.

If a hook script rejects your commit then its decision is final. But you can build an override mechanism into the script itself using the Magic Word technique. If the script wants to reject the operation it first scans the log message for a special pass phrase, either a fixed phrase or perhaps the filename with a prefix. If it finds the magic word then it allows the commit to proceed. If the phrase is not found then it can block the commit with a message like "You didn't say the magic word". :-)(你可以通過白名單放行一些文件的提交命令)

檢出鏈接

如果你希望你的 Subversion 版本庫對於別人可用,你可以在你的站點包含一個鏈接。為了讓其更加容易訪問,你可以為其它 TortoiseSVN 用戶包含一個檢出鏈接。

當你安裝了 TortoiseSVN,它會注冊一個 tsvn: 協議,當 TortoiseSVN 用戶點擊這樣一個鏈接,檢出窗口會自動彈出,且版本庫 URL 已經填入。

想要在你個人的 html 頁面中加入這樣的鏈結,只需要添加像這樣的代碼即可:

<a href="tsvn:http://project.domain.org/svn/trunk"></a>

當然,如果能插入一張合適的圖片會看起來更好。你可以使用 TortoiseSVN 標志或者你自己的圖片。

<a href="tsvn:http://project.domain.org/svn/trunk"><img src=TortoiseCheckout.png></a>

你同樣可以使鏈接指向一個特定的版本,例如

<a href="tsvn:http://project.domain.org/svn/trunk?100"></a>

訪問版本庫

  • 要使用 TortoiseSVN (或其它 Subversion 客戶端程序),需要定位版本庫的所在之處。版本庫可以位於本機使用 file:// 協議訪問,或者位於服務器端使用 http:// 或 svn:// 協議訪問。這兩個服務器協議都可以加密。那就是 https:// 或 svn+ssh://, 抑或帶 SASL 加密的 svn://。
  • 如果你使用公共的主機服務,例如 Google Code [http://code.google.com/hosting/],或者已經有人為你架設好了服務器,那么在這里你不用做什么。
  • 如果你沒有服務器並且獨自工作,或者只是想在獨立的環境下評估 Subversion 和 TortoiseSVN,那么本地版本庫可能是你最好的選擇。
  • 如果你打算在網絡共享中設者一個多用戶的版本庫,請重新考慮。

日常使用指南

本文目的在與描述TortoiseSVN客戶端的日常使用。不是一個版本控制系統指南,也不是Subversion(SVN)的指南。本文檔的價值在於,當你知道大概要做什么,卻又記不起應該怎么做的時候,可以有個參考的地方。

This section describes some of the features of TortoiseSVN which apply to just about everything in the manual. Note that many of these features will only show up within a Subversion working copy.(下面所講的一切特性,只會出現在工作副本中)

圖標重載

可以通過Setting修改不同的風格

重載的圖標顯示在你的工作副本文件上。你一眼就可以看到文件被修改過了。

右鍵菜單

版本控制下(工作副本文件夾上)一個目錄的右鍵菜單

一個命令是否顯示取決於這個文件或文件夾或者它們的父文件夾是否受版本控制,你也可以將TortoiseSVN的菜單作為資源管理器菜單的一部分。

某些很少被用到的命令只出現在擴展右鍵菜單中。要想打開擴展右鍵菜單,需要在 右鍵單擊 時按住 Shift 鍵。(在某些情況下,你可能看到多個TortoiseSVN條目。這不是BUG!)

在一個版本控制的文件夾下資源管理器文件菜單中的快捷方式。

本示例是在一個受控文件夾下的某個未受控的快捷方式, 在資源管理器的文件菜單下有三個TortoiseSVN條目。一個是受控文件夾本身的,一個是快捷方式本身的,第三個是快捷方式所指向的對象。為了幫助你區分它們,菜單條目的圖標的右下角有標志,表明是文件、快捷方式、文件夾或是選中了多項。

This example is for an unversioned shortcut within a versioned folder, and in the Explorer file menu there are three entries for TortoiseSVN. One is for the folder, one for the shortcut itself, and the third for the object the shortcut is pointing to. To help you distinguish between them, the icons have an indicator in the lower right corner to show whether the menu entry is for a file, a folder, a shortcut or for multiple selected items.

在工作副本里右鍵拖拽文件或目錄到新的位置,或者右鍵拖拽一個非版本控制的文件或文件夾到一個版本控制目錄下的時候,右鍵菜單還能夠出現其他的命令。

常用快捷方式

F5 刷新當前視圖。這也許是單鍵命令中唯一一個最常用的了。比如... 在資源瀏覽器中,這個鍵可以刷新工作副本中的圖標重載。在提交對話框中,它可以重新掃描查找哪些是需要提交的。在版本日志對話框中,可以重新聯系版本庫以檢查更多的最近修改情況。

認證

如果連接的版本庫需要密碼,就會顯示認證對話框。

輸入你的用戶名和密碼。復選框能讓 TortoiseSVN 在 Subversion 的缺省目錄: %APPDATA%\Subversion\auth 的三個子目錄內保存認證信息:

• svn.simple 里包含了基本認證方式所需要的認證信息(用戶名/密碼)。注意,保存的密碼是通過WinCrypt API 加密的,不是文本形式。

• svn.ssl.server 里包含了SSL服務器證書。

• svn.username 里包含了用戶名認證的認證信息(不需要提供密碼)。

If you want to clear the authentication cache, you can do so from the Saved Data page of TortoiseSVN's settings dialog. The button Clear all will clear the cached authentication data for all repositories. The button Clear... however will show a dialog where you can chose which cached authentication data should be deleted.

可以通過TortoiseSVN客戶端刪除認證,也可以很暴力的直接刪除%APPDATA%\Subversion\auth文件夾和其內容刪除認證。

Some people like to have the authentication data deleted when they log off Windows, or on shutdown. The way to do that is to use a shutdown script to delete the %APPDATA%\Subversion \auth directory, e.g.

 

@echo off

rmdir /s /q "%APPDATA%\Subversion\auth"

還可以寫個關機腳本,自動刪除%APPDATA%\Subversion\auth文件夾和其內容

You can find a description of how to install such scripts at http://www.windows-help-central.com/windows-shutdown-script.html.

導入數據到版本庫

如果將項目導入一個已經含有其它項目的版本庫中,那么版本庫的結構已經確定了。如果要導入一個新的版本庫中,那么最好花點時間來想一下如何設置版本庫的結構。

This section describes the Subversion import command(導入命令), which was designed for importing a directory hierarchy(目錄層次) into the repository in one shot(一次性). Although it does the job, it has several shortcomings:(雖然該方法可行,但是有幾個缺點)

  • 不能選擇包括哪些文件或文件夾,除非使用全局忽略設置。
  • 導入的文件夾不能變成工作副本。你必須通過簽出操作從服務器拿回文件。
  • 很容易導入到版本庫中錯誤的文件夾層次。

因此不建議直接導入而是通過文章后面介紹的兩步法導入 , unless you are performing the simple step of creating an initial /trunk /tags /branches structure in your repository. Since you are here, this is how the basic import works ...

在將你的項目導入到版本庫之前,你應該:

1. 刪除所有構建工程不需要的文件(臨時文件,編譯器產生的文件,例如 *.obj,生成的二進制文件,...)

2. 組織目錄和子目錄內的文件。盡管以后可以改名/刪除文件,我們還是建議你在導入之前使你的項目結構組織良好!

現在進入資源管理器,選擇你的項目的頂層目錄,右擊打開上下文菜單。選擇命令TortoiseSVN → 導入 ...,它會彈出一個對話框:

In this dialog you have to enter the URL of the repository location where you want to import your project. It is very important to realise that the local folder you are importing does not itself appear in the repository, only its content.

Note that the import command will automatically create subdirectories within the repository if they do not exist.如果服務端版本庫沒有指定路徑,則在導入時會自動創建。

在文件夾上右鍵導入,不會導入該文件夾本身,而是導入該文件夾下的內容到服務端版本庫的主目錄下。

默認情況下,匹配全局忽略模式的文件和文件夾不會被導入。你可以使用包含忽略文件檢驗欄來禁止此行為。

當你點擊確認時,TortoiseSVN 會導入包含所有文件的完整目錄樹到版本庫。現在這個工程就存貯在版本庫,被版本控制。請注意,你導入的文件夾沒有被版本控制!你需要檢出剛才導入的版本,以便獲得受版本控制的工作副本。

導入適當的位置

假定你已經有個版本庫,你想給它增加一個新目錄結構,只需以下步驟:

1. Use the repository browser to create a new project folder directly in the repository.If you are using one of the standard layouts you will probably want to create this as a sub-folder of trunk rather than in the repository root. The repository browser shows the repository structure just like Windows explorer, so you can see how things are organised.(通過repository browser直接在服務端版本庫內創建目錄結構)

2. Checkout the new folder over the top of the folder you want to import. You will get a warning that the local folder is not empty. Ignore the warning. Now you have a versioned top level folder with unversioned content.

3. 在此受版本控制的文件夾上使用TortoiseSVN → 增加...增加部分或全部內容。你可以增加或刪除文件,在文件夾上設置svn:ignore屬性,或者你需要的其它修改。

4. 提交頂級目錄,你有一個新的版本樹,一份從你已有目錄創建的本地工作副本。(先全部下載版本庫里的文件,然后調整並增加新目錄結構,然后提交到版本庫)

專用文件

有時候你需要版本控制一個包含用戶專用的數據。它意味着你有一個文件,每個開發者/用戶都需要修改,一邊滿足他/她的本地配置。但是版本控制這樣的文件是困難的,因為每個用戶可能都要提交他/她的修改。

在這種情況下,我們建議使用模版文件。創建一個包含所有開發者需要的數據的文件,增加到版本庫中,讓開發者檢出。然后,每個開發者創建一個副本,改名此文件。於是,修改這個文件不再是問題。

As an example, you can have a look at TortoiseSVN's build script. It calls a file named default.build.user which doesn't exist in the repository. Only the file default.build.user.tmpl. default.build.user.tmpl is the template file which every developer has to create a copy from and rename that file to default.build.user. Inside that file, we added comments so that the users will see which lines they have to edit and change according to their local setup to get it working.(通過腳本實現模板文件)

So as not to disturb the users, we also added the file default.build.user to the ignore list of its parent folder, i.e. we've set the Subversion property svn:ignore to include that filename. That way it won't show up as unversioned on every commit.

檢出工作副本

為了得到一個工作副本,需要進行從版本庫檢出的操作。

在Windows資源管理器里選擇一個存放工作副本的目錄。右鍵點擊彈出右鍵菜單,選擇TortoiseSVN →檢出…命令。然后就會看到下面的對話框:

如果輸入一個並不存在的目錄名,那么這個名字的目錄就會被創建出來。

In the default setting, the checkout menu item is not located in the TortoiseSVN submenu but is shown at the top explorer menu. TortoiseSVN commands that are not in the submenu have SVN prepended: SVN Checkout...(Checkout菜單在主菜單顯示)

檢出深度

你可以選擇要檢出的深度,它允許你指定子目錄遞歸的深度。如果你只需要大目錄中的幾個子條目,你可以只檢出最高層目錄,然后遞歸的更新選擇的目錄。

全遞歸Fully recursive

檢出完整的目錄樹,包含所有的文件或子目錄。

直接子節點,包含文件夾Immediate children, including folders

檢出目錄,包含其中的文件或子文件夾,但是不遞歸展開子文件夾。

僅文件子節點Only file children

檢出指定目錄,包含所有文件,但是不檢出任何子文件夾。

僅此項Only this item

只檢出目錄。不包含其中的文件或子文件夾。

工作副本Working copy

保持工作副本指定的深度。此選項不用於檢出對話框,但它是其它所有含有深度配置對話框的默認配置。

排除Exclude

對於已經創建好的工作副本,可以使用此選項來縮減文件夾的深度。這個選項只在更新至版本對話框中可用。

To easily select only the items you want for the checkout and force the resulting working copy to keep only those items, click the Choose items... button. This opens a new dialog where you can check all items you want in your working copy and uncheck all the items you don't want. The resulting working copy is then known as a sparse checkout. An update of such a working copy will not fetch the missing files and folders but only update what you already have in your working copy.

自定義深度檢出按鈕

  • Sparse Update using Update to Revision【TortoiseSVN → Update to Revision and select Choose items....】
  • Sparse Update using Repo Browser【TortoiseSVN → Repo-Browser to bring up the repository browser. Find the sub-folder you would like to add to your working copy, then use Context Menu → Update item to revision....】
  • Sparse Update using Check for Modifications【first shift click on the button Check repository. The dialog will show all the files and folders which are in the repository but which you have not checked out as remotely added. Right click on the folder(s) you would like to add to your working copy, then use Context menu → Update.】

改變工作副本深度

一旦以某個深度檢出了工作副本后,以后還可以修改這個深度來獲得更多或更少的內容,使用 右鍵菜單 → 更新該項至版本。在彈出的對話框中,確認選中了 粘滯深度 復選框。

使用舊版本服務器

1.5 版之前的服務器不支持工作副本深度請求。所以不能有效的處理這種請求。不過該命令仍然可以使用,但是舊版本的服務器會發送所有的數據,讓客戶端來過濾掉哪些是不需要的,這就意味着大量的網絡傳輸。如果可能,應該將服務器升級到 1.5 版以上。

如果項目含有外部項目的引用,而這些引用你不希望同時檢出,請選中忽略外部項目復選框。

如果選中了 忽略外部項目,或者想要增加深度值,你應該使用 TortoiseSVN → 更新至版本... 替代 TortoiseSVN → 更新 來對工作副本進行更新。標准的更新操作會包含外部項目並保持深度。

強烈建議你只檢出 trunk 或更低層的目錄樹。如果你在 URL 中指定了根路徑,你的硬盤有可能被塞滿,因為你將會得到整個版本庫樹的副本,包括項目所有的分支和標簽(tag)!

將你的修改提交到版本庫

將你對工作副本的修改發送給版本庫,稱為提交修改。但在你提交之前要確保你的工作副本是最新的。你可以直接使用TortoiseSVN → 更新,或者,你可以先使用TortoiseSVN → 檢查修改看看哪些文件在本地或是服務器上已經有了改動。

提交對話框

如果你的工作副本是最新的,並且沒有沖突,你就已經為提交做好准備了,選擇你要提交的文件和/或文件夾,然后TortoiseSVN → 提交....

提交對話框將顯示每個被改動過的文件,包括新增的、刪除的和未受控的文件。如果你不想改動被提交,只要將該文件的復選框的勾去掉就可以了。如果你要加入未受控的文件,只要勾選該文件把它加入提交列表就可以了。

To quickly check or uncheck types of files like all versioned files or all modified files,click the link items just above the list of shown items.(點擊上面的鏈接,快速選擇需要的項目)

那些被切換(switched)到不同版本庫路徑的項也用(s)標記來表示。當工作在分支上的時候你可能切換到某處,然后忘記切換回主干。這是你的警告信號!

提交文件還是文件夾?

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

在提交對話框中有很多未受控的文件

如果你認為提交對話框顯示了太多的未受版本控制的文件(如編譯器產生的文件或是編輯器的備份文件),有幾種方法可以處理這種情況。你可以:

• 將文件(或是通配符擴展)加入到設置頁的排除列表中。這對每個工作副本都起作用。

• 使用TortoiseSVN->加入忽略列表,將文件加入svn:ignore列表。 這只對你設置了svn:ignore屬性的路徑有效。使用SVN屬性對話框,你可以改變一個目錄的svn:ignore屬性。

• add the file to the svn:global-ignores list using TortoiseSVN → Add to ignore list (recursively遞歸地) This will affect the directory on which you set the svn:global-ignores property and all subfolders as well.(全局忽略)

在提交對話框中雙擊任何修改過的文件,將運行外部 diff 工具顯示你做的改動。上下文菜單將給你更多的選項,請看屏幕截圖。你可以從這里將文件拖動到另一個應用程序中,如文本編輯器或 IDE。可以通過單擊條目左側的復選框來選中或不選該條目。對於目錄,可以按下 Shift 鍵再 選擇 就可以

遞歸該動作。

在底部面板中顯示的列是可定制的。如果你右擊任何一列的頭部,你就會看到一個上下文菜單,允許你選擇哪一列要顯示。還可以在鼠標移動到列邊界時通過拖動手把來改變列的寬度。這些定制的內容都會被保留下來,下一次你會見到相同的列。缺省情況下,當你成功提交修改后,你在這些文件上持有的鎖會被自動釋放。如果你需要保留鎖,請確認選中檢查框保留鎖。此檢查框的缺省狀態從 Subversion 配置文件的 no_unlock 選項獲取。

Warning when committing to a tag

Usually, commits are done to the trunk or a branch, but not to tags. After all, a tag is considered fixed and should not change.(一般只針對trunk和branch提交,tags不提交)

If a commit is attempted to a tag URL, TortoiseSVN shows a confirmation dialog first to ensure whether this is really what is intended. Because most of the time such a commit is done by accident.However, this check only works if the repository layout is one of the recommended

ones, meaning it uses the names trunk, branches and tags to mark the three main areas. In case the setup is different, the detection of what is a tag/branch/trunk (also known as classification patterns)

拖放

你可以將文件從別的地方拖動到提交對話框,只要工作副本是由同一版本庫中檢出就可以了。比如,你有一個很大的工作副本,要開好幾個資源管理器窗口來查看層次中不同的文件夾。如果你要避免從頂級文件夾提交(冗長而緩慢的文件夾改動檢查),你可以打開一個文件夾的提交對話框,然后將別的窗口中的項拖進去,可樣就可以一次提交它們了。

你可以將未版本控制的文件拖到工作副本提交對話框中,它們就會被自動增加。從提交對話框底部的列表中將文件拖拽到日志消息編輯框中,就能以文本格式將文件的路徑插入編輯框中。當你想將本次提交相關的文件路徑插入日志消息中時該功能非常有用。

修復外部改名

有時候文件不是用 Subversion 改名,於是它們在文件列表中作為丟失和未版本控制的文件出現。為了避免丟失歷史,你需要通知Subversion。簡單的選擇老名稱(丟失)和新名稱(未版本控制),然后使用右鍵菜單 → 修復移動【Context Menu → Repair Move】來指明這兩個文件是改名關系。

修復外部復制

如果復制了一個文件,但不是通過 Subversion 的命令來做的,你可以修復此次復制來確保新文件不會丟失歷史。只要簡單的選擇舊文件(正常或已修改)和新文件(無版本控制),然后使用 右鍵菜單 → 修復復制【Context Menu → Repair Copy】來修復兩個文件的復制關系。

Commit only parts of files只提交文件的部分

Sometimes you want to only commit parts of the changes you made to a file. Such a situation usually happens when you're working on something but then an urgent fix needs to be committed, and that fix happens to be in the same file you're working on.

right click on the file and use Context Menu → Restore after commit. This will create a copy of the file as it is. Then you can edit the file, e.g. in a text editor and undo all the changes you don't want to commit. After saving those changes you can commit the file.

使用 TortoiseMerge

If you use TortoiseMerge to edit the file, you can either edit the changes as you're used to, or mark all the changes that you want to include. right click on a modified block and use Context Menu → Mark this change to include that change. Finally right click and use Context Menu → Leave only marked changes which will change the right view to only include the changes you've marked before and undo the changes you have not marked.(在合並工具里右側右鍵菜單標記改變和取消標記)

After the commit is done, the copy of the file is restored automatically, and you have the file with all your modifications that were not committed back.(自動保存)

從提交列表中排除項目

有時,你經常更改一些版本控制的文件但你卻不打算提交它們。這有可能說明你的構建過程中存在瑕疵- 那些文件為什么是版本控制的?應該使用模版文件嗎?但可能這是無法避免的。一個經典的原因是當你每次構建的時候,集成開發環境(IDE)更改了項目文件的時間戳。項目文件是版本控制的,因為它包含全部的構建設置。但是,僅僅因為時間戳更改了的情況下,你並不需要提交它。

為了解決這樣一個棘手的問題,我們准備了一個名叫 ignore-on-commit 的更改列表。任何一個被添加到這個列表的文件在提交對話框中將不會自動選中。你仍然可以提交此文件的更改,不過你需要在提交對話框中手動選中它。

提交日志信息

確保輸入描述你所提交的修改內容的日志信息。這可以幫你回顧做了什么,什么時候做的。信息的內容可長可短,許多項目規定了要包含的內容、使用的語言甚至是嚴格的格式。

你可以使用與電子郵件相似的約定,簡單格式化日志消息。如果對文本采用這些樣式,使用*文本*表示粗體,_文本_表示下划線,^文本^表示斜體

TortoiseSVN包含了一個拼寫檢查器幫助你正確地書寫日志信息。對任何錯誤拼寫的詞都高亮顯示。使用右鍵菜單可以獲得修改建議。當然它不會知道所有的技術術語,所以有時一些拼寫正確的詞會被當作錯誤。但不用擔心,你可以使用右鍵菜單將它們加入你的個人字典中。

日志消息窗口同時也含有文件名和函數自動完成的功能。它使用正則表達式從本次提交的(文本)文件中抽取類和函數的名稱,以及被提交文件的文件名。如果你輸入的單詞與列表中的內容匹配(至少鍵入 3個字符,或者按 Crtl+空格鍵),就會顯示一個下拉列表讓你選擇完整的名字。TortoiseSVN 支持的正則表達式位於 TortoiseSVN 安裝文件夾下的 bin 文件夾中。你可以自定義匹配規則然后將其保存在文件 %APPDATA%\TortoiseSVN\autolist.txt 中。當然,在升級新版本的 TortoiseSVN 時你個人的自動匹配規則列表不會被覆蓋。如果你不熟悉正則表達式,可以看一下介紹: http://zh.wikipedia.org/wiki/正則表達式,以及在線文檔和教程: http://www.regular-expressions.info/。

寫出正確的匹配規則有點棘手,所以為了幫你寫出合適的表達式,我們提供了一個對話框,你可以輸入表達式,然后輸入文件名來做個測試。要啟動該對話框,在命令提示符中輸入這個命名:TortoiseProc.exe /command:autotexttest。

The log message window also includes a commit message snippet facility. These snippets󅘙are shown in the autocomplete dropdown once you type a snippet shortcut, and selecting the snippet in the autocomplete dropdown then inserts the full text of the snippet. The snippets supplied with TortoiseSVN are held in the TortoiseSVN installation bin folder. You can also define your own snippets and store them in %APPDATA%\TortoiseSVN\snippet.txt. # is the comment character. Newlines can be inserted by escaping them like this: \n and \r. To insert a backslash, escape it like this: \\.(可以自定義一些快捷短語)

你可以重復使用先前鍵入的日志信息。只需要點擊最近信息即可查看你為此工作副本鍵入的最近幾條信息。你可以從 TortoiseSVN 的設置窗口的已保存數據頁中清除所有的保存消息,或者你可以在最近信息對話框中使用 Delete 鍵單獨刪除某條消息。

如果想要在日志信息中加入選中的文件的名稱和狀態,可以在編輯框中使用 右鍵菜單 → 粘貼文件名列表。另一個向日志消息中插入路徑的方法是: 從文件列表中將文件拖拽到文本框中

與缺陷跟蹤工具集成

如果你激活了一個bug跟蹤系統,你可以在Bug-ID / Issue-Nr:文本框中設置一個或多個問題。多個問題應該用逗號分割。或者,如果你使用基於正則表達式的bug跟蹤支持,只要將你的問題引用作為日志信息的一部分加入就可以了。

提交進程

在按下OK之后,會出現一個對話框顯示提交的進度。

進度對話框使用顏色代碼來高亮顯示不同的提交行為。

  • 藍色 提交一個修改。
  • 紫色 提交一個新增項。
  • 深紅 提交一個刪除或是替換。
  • 黑色 所有其他項。

這是默認的配色方案,但你可以通過設置對話框來定制這些顏色。

用來自別人的修改更新你的工作副本

你需要定期地確保將別人所做的修改整合到你本地的工作副本中。從服務器獲取更改到本地副本的過程就叫做 更新。更新的對象可以是一個文件,選中的多個文件或者對整個目錄結構進行遞歸。要進行更新,選中要更新的文件或目錄,右鍵單擊然后選中右鍵菜單中的 TortoiseSVN → 更新。將會彈出一個窗口,隨着更新的進行顯示進度。其他人所做的更改將會合並到你的文件中,並保留同一個文件中你所做的更改。版本庫 不會 受更新影響。

進度對話框使用顏色代碼來高亮不同的更新行為

  • 紫色 新項已經增加到你的工作副本中。
  • 深紅 你的工作副本中刪除了多余項,或是你的工作副本中丟失的項被替換。
  • 綠色 版本庫中的修改與你的本地修改成功合並。
  • 亮紅 來自版本庫的修改在與本地修改合並時出現了沖突,需要你解決。
  • 黑色 你的工作副本中的沒有改動的項被來自版本庫中新版本所更新。

這是默認的配色方案,但你可以通過設置對話框來定制這些顏色。

如果在更新過程中發生了 沖突 (有可能是因為你和他人修改了同一個文件的同一行並且這些更改不匹配)那么對話框會用紅色顯示沖突。可以通過 雙擊 那些行來啟動外部合並工具解決沖突。等更新結束后,對話框會在文件列表的底部顯示一段總結,包括已更新、已添加、已刪除、沖突等情況的條目數量。可以使用 Ctrl+C 將這段信息復制到剪貼板。

The standard Update command has no options and just updates your working copy to the HEAD revision of the repository, which is the most common use case. If you want more control over the update process, you should use TortoiseSVN → Update to Revision... instead. This allows you to update your working copy to a specific revision, not only to the most recent one.

You can also choose whether to ignore any external projects in the update (i.e. projects referenced using svn:externals).

如果你將文件或文件夾更新至某個特定版本,就不應該修改這些文件。當提交它們時會得到錯誤消息 "過期"!如果你想撤銷某個文件的更改然后從先前的版本開始重新開始,可以從版本日志對話框中回滾至先前的版本。

當要查看你的項目在過去的某個時間是什么樣子時, 更新至版本 功能有時會很有用。但一般來說,更新單個文件到一個較早的版本不是一個好主意,因為這樣就使工作副本處於一種不一致的狀態。如果更新的文件改變了文件名,你甚至會發現該文件從你的工作副本中消失了,因為在較早的版本中沒有叫這個名字的文件。也還會發現該條目顯示正常的綠色圖標重載,所以很難察覺到存在過期的文件。

如果你只是想要某文件早先版本的本地副本,從該文件的日志對話框中使用 右鍵菜單 → 保存版本至... 更好。

多文件/文件夾

如果你在資源管理器中選擇了多文件和文件夾,然后選擇更新,這些文件/文件夾一個接一個的被更新。TortoiseSVN確保所有的來自同一版本庫的文件/文件夾被更新到同一個版本!即使在更新過程中發生了另一個提交。

解決沖突

偶爾,當你從版本庫更新、合並文件時,或者切換工作副本至一個不同的 URL 時你會遇到沖突。有兩種沖突:

文件沖突 當兩名(或更多)開發人員修改了同一個文件中相鄰或相同的行時就會發生文件沖突。

樹沖突 當一名開發人員移動、重命名、刪除一個文件或文件夾,而另一名開發人員也對它們進行了移動、重命名、刪除或者僅僅是修改時就會發生樹沖突。

文件沖突

A file conflict occurs when two or more developers have changed the same few lines of a file. As Subversion knows nothing of your project, it leaves resolving the conflicts to the developers. The conflicting area in a text file is marked like this:

<<<<<<< filename

your changes

=======

code merged from repository

>>>>>>> revision

Also, for every conflicted file Subversion places three additional files in your directory:

文件名.擴展名.mine(filename.ext.mine 這是你的文件,在你更新你的工作副本之前存在於你的的工作副本中——也就是說,沒有沖突標志。這個文件除了你的最新修改外沒有別的東西。

文件名.擴展名.r舊版本(filename.ext.rOLDREV這是在你更新你的工作副本之前的基礎版本(BASE revision)文件。也就是說,它是在你做最后修改之前所檢出的文件。

文件名.擴展名.r新版本(filename.ext.rNEWREV這個文件是當你更新你的工作副本時,你的 Subversion 客戶端從服務器接收到的。這個文件對應於版本庫中的最新版本。

You can either launch an external merge tool / conflict editor with TortoiseSVN → Edit Conflicts (TortoiseSVN → Edit Conflicts)or you can use any text editor to resolve the conflict manually. You should decide what the code should look like, do the necessary changes and save the file. Using a merge tool such as TortoiseMerge or one of the other popular tools is generally the easier option as they generally present the files involved in a 3-pane view and you don't have to worry about the conflict markers. If you do use a text editor then you should search for lines starting with the string <<<<<<<.(沖突部分以<<<<<<<.開始標記)

然后,執行命令 TortoiseSVN → 已解決(TortoiseSVN → Resolved)並提交人的修改到版本庫。需要注意的是已解決命令並不是真正的解決了沖突,它只是刪除了文件 文件名.擴展名.mine 和 文件名.擴展名.r*,允許你提交修改。

如果你的二進制文件有沖突,Subversion不會試圖合並文件。本地文件保持不變(完全是你最后修改時的樣子),但你會看到文件名.擴展名.r*文件。如果你要撤消你的修改,保留版本庫中的版本,請使用SVN 還原(Revert)命令。如果你要保持你的版本覆蓋版本庫中的版本,使用已解決命令,然后提交你的版本。

你可以右擊父文件夾,選擇TortoiseSVN → 已解決...,(TortoiseSVN → Resolved...)使用"已解決"命令來解決多個文件。這個操作會出現一個對話框,列出文件夾下所有有沖突的文件,你可以選擇將哪些標記成已解決。

屬性沖突

當兩名或更多的開發人員修改了某個文件的屬性時就會發生屬性沖突。屬性作為文件的一部分,解決屬性沖突只能由開發人員來完成。

如果一個更改必須被另一個覆蓋,那么就在 使用本地屬性解決 和 使用遠程屬性解決 中選擇一個。如果更改想要被合並,那就選擇 手工編輯屬性,選出所要的屬性值然后標記為已解決。

樹沖突

當一名開發人員移動、重命名、刪除一個文件或文件夾,而另一名開發人員也對它們進行了移動、重命名、刪除或者僅僅是修改時就會發生樹沖突。有很多種不同的情形可以導致樹沖突,而且不同的情形需要不同的步驟來解決沖突。

當一個文件通過 Subversion 在本機刪除后,文件也從本機文件系統中刪除。因此即使它是樹沖突的一部分,卻既不能顯示沖突的疊加圖標也不能通過右鍵單擊來解決沖突。使用檢查修改對話框來獲得編輯沖突選項。

TortoiseSVN 能夠協助找到合並更改的正確位置,但是需要作一些額外的工作來整理沖突。請牢記: 當進行一次更新操作后,工作副本的基礎文件將會包括每一個項目在執行更新操作時版本庫中的版本。如果你在進行更新后再撤銷更改,工作副本將返回到版本庫的狀態,而不是你開始進行更改前的狀態。

本地刪除,當更新時有更改進入

本地更改,當更新時有刪除進入

本地刪除,當更新時有刪除進入

本地缺少,當合並時有更改進入

本地更改,當合並時有刪除進入

本地刪除,當合並時有刪除進入

其它樹沖突

TortoiseSVN 加入了被稱為重載圖標的功能重載了原始的文件圖標。根據文件的 Subversion 狀態的不同,重載的圖標也不同。

一個新檢出的工作副本使用綠色的對勾做重載。表示 Subversion 狀態正常.

在你開始編輯一個文件后,狀態就變成了已修改,而圖標重載變成了紅色感嘆號。通過這種方式,你可以很容易地看出哪些文件從你上次更新工作副本后被修改過,需要被提交。

如果在更新的過程中出現了沖突,圖標會變成黃色感嘆號。

如果你給一個文件設置了svn:needs-lock屬性,Subversion 會讓此文件只讀,直到你獲得文件鎖。具有這個重載圖標的文件來表示你必須在編輯之前先得到鎖。

如果你擁有了一個文件的鎖,並且 Subversion 狀態是正常,這個重載圖標就提醒你如果不使用該文件的話應該釋放鎖,允許別人提交對該文件的修改。

這個圖標表示當前文件夾下的某些文件或文件夾已經被調度從版本控制中刪除,或是該文件夾下某個受版本控制的文件丟失了。

加號告訴你有一個文件或目錄已經被調度加入版本控制。

橫條告訴你有一個文件或目錄被版本控制系統所忽略。這個圖標重載是可選的。

這個圖標說明文件和目錄未被版本控制,但是也沒有被忽略。這個圖標重載是可選的。

事實上,你會發現並不是所有的圖標被你的系統使用。這是由於 Windows 允許的重載圖標數量很有限,如果你同時使用舊版的 TortoiseCVS,就沒有足夠的重載可用。TortoiseSVN 試圖成為一個"良好(TM)",限制自身使用重載圖標,為別的程序留下機會。

詳細狀態

有時你可能想得到關於一個文件/目錄的更多的細節信息而不僅是一個重載的標志。 你能得到Subversion的屬性對話框中瀏覽到的所有信息。只需選擇指定文件或目錄,然后在文件菜單中選擇Windows 菜單 → 屬性(注意: 這是資源管理器提供的標准屬性菜單,而不是TortoiseSVN 子菜單的其中之一)。在TortoiseSVN 屬性對話框中已經為在Subversion控制下的文件/目錄增加新的屬性頁。在這里你能看到所有的關於選擇文件/目錄的相關信息。

本地與遠程狀態

通常知道你修改了哪些文件以及哪些文件已經由另人修改並提交了是很有用的。這就是命令TortoiseSVN → 檢查修改 的用武之地了。這個對話框顯示了所有你的工作副本中進行了任何形式的修改的的文件,也包括了當前存在的未受控的文件。

如果單擊 檢查版本庫 就會同時查看版本庫中的更改。通過這種方法可以在更新之前檢查是否可能發生沖突。你也可以從版本庫中只更新選中的文件而無需更新整個文件夾。在默認情況下,檢查版本庫 按鈕只獲取位於工作副本深度內的條目的遠程狀態。如果要查看版本庫中所有的文件和文件夾,即使有些文件並沒有被檢出,那么就應該在單擊 檢查版本庫 按鈕時按住 Shift 鍵。

對話框使用顏色代碼來高亮顯示狀態。

藍色 本地被修改過的項

紫色 增加的項。那些被加入的項在文本狀態列中有個+號表示,工具提示(tooltip)顯示了該項是從哪里復制來的。

深紅 刪除的或是丟失的項。

綠色 在本地和版本庫中都有被修改過的項。改動將在更新的時候被合並。這種情況很可能在更新的時候產生沖突。

亮紅 在本地被修改過但在版本庫中已經被刪除的項,或者在版本庫中被修改但在本地被刪除的項。這種情況必將在更新時產生沖突。

黑色 未修改和未受控的項。

在對話框的上下文菜單中你可以顯示改變的差異。使用 上下文菜單 → 與基礎版本比較檢查你所作的本地修改。使用上下文菜單 → 使用標准差異格式顯示差異檢查版本庫中別人作的修改。

你也可以還原單個文件的修改。如果不小心刪除了某個文件,就會顯示為 缺少 而且可以使用 SVN 還原 來恢復它。

可以使用右鍵菜單 → 刪除將未版本控制的或忽略的文件丟到垃圾箱。如果你想徹底刪除(不使用垃圾箱),在點擊刪除時,請按着Shift鍵。

這些列是可定制的。如果你右擊任何一列的頭部,你就會看到一個上下文菜單,允許你選擇哪一列要顯示。還可以在鼠標移動到列邊界時通過拖動把手來改變列的寬度。這些定制的內容都會被保留下來,下一次你會見到相同的頭部。

如果你同時做幾個不相關的任務,也可以在修改列表中分組文件。

在對話框的底部可以看到在你的工作副本中所使用的版本庫版本號范圍的總結。它們是 提交 的版本號,不是 更新 的版本號; 它們表示這些文件上一次提交的版本號范圍,不是它們被更新的版本號。注意,這個版本號范圍僅僅對應於顯示的條目,而不是整個工作副本。如果要查看整個工作副本的信息,必須要選中 未修改的 復選框。

如果你需要工作目錄的全面視圖,也就是所有文件和文件夾都同時顯示,以便方便的使用檢查修改。只要選擇現實未修改文件檢查欄,顯示工作目錄中的所有文件即可。

修復外部改名

有時候文件不是用 Subversion 改名,於是它們在文件列表中作為丟失和未版本控制的文件出現。為了避免丟失歷史,你需要通知Subversion。簡單的選擇老名稱(丟失)和新名稱(未版本控制),然后使用右鍵菜單 → 修復移動來指明這兩個文件是改名關系。

修復外部復制

如果復制了一個文件,但不是通過 Subversion 的命令來做的,你可以修復此次復制來確保新文件不會丟失歷史。只要簡單的選擇舊文件(正常或已修改)和新文件(無版本控制),然后使用 右鍵菜單 → 修復復制來修復兩個文件的復制關系。

查看差別

通常你想要深入文件中了解你修改了什么。要達到這個目的,你可以選中這個文件,然后在TortoiseSVN的右鍵菜單中選擇比較。這個操作會啟動一個外部的差別檢查程序,由它來比較當前文件與上一次檢出或更新后的原始的副本(基礎版本)。

即使你不是在一個工作副本中工作或者你有多個版本的文件,你都可以按以下方法來進行比較:

選擇你要比較的兩個文件(比如,你可以使用Ctrl 鍵加鼠標),然后從TortoiseSVN的右鍵菜單中選擇比較。最后一個被鼠標點中的文件(具有焦點的文件,比如有虛線框的文件具有焦點),將作為被比較文件的后一個。

修改列表

理想情況下,你任何時候都只做一件事,你的工作副本只包含一個邏輯修改集合。很好,回到現實。你經常會同時做幾件不相關的事,當你察看提交對話框時,所有修改混到一起。修改列表特性幫助你分組,讓你容易看到正在做什么。當然它只能在修改不重合的時候工作。如果兩個不同的任務影響到同一個文件,沒有辦法隔離修改。

在很多地方可以看到修改列表,但是最常見的是提交對話框和檢查修改對話框。讓我們從檢查修改對話框開始--在你完成了多個特性和很多文件后的檢查修改對話框。當你第一次打開對話框,所有的修改過的文件被列在一起。假設你現在想要組織任務並且按照特性將這些文件分組。

選擇一個或多個文件並且使用右鍵菜單 → 移動到修改列表可以增加一個項目到修改列表。最初沒有修改列表,所以你第一次做的時候,會創建一個新的修改列表。給出一個能描述它的作用的名稱,然后點擊確定。提交對話框會改變為顯示項目分組。

當你創建好修改列表后,你就可以將文件拖放進去,既可以從其它修改表中拖過去,也可以從 Windows資源管理中拖過去。將一個未被修改的文件加入修改列表時,從 Windows 資源管理器拖拽就很有用。你可以在檢查修改對話框中這樣做,但要顯示未修改的文件。

在提交對話框中可以看到被修改列表分組的那文件。除了分組可以直接指示之外,你也可以使用組頭選擇提交哪些文件。

TortoiseSVN 保留了一個它自己使用的修改列表名稱--ignore-on-commit。這個列表用於標記某些版本控制的文件,它們在本地被修改你卻不打算提交他們。

當提交屬於修改列表的文件后,通常情況下用戶不再需要修改列表的成員關系。所以在默認情況下,當提交時文件會從修改列表中除去。如果你希望文件被保留在更改列表中,選中提交對話框底部的 保持修改列表

Note that if you use changelists, externals will no longer show up in their own groups anymore. Once there are changelists, files and folders are grouped by changelist, not by external anymore.

版本日志對話框

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

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

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

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

• 中間的面板顯示了被選中的版本的完整的日志信息。

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

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

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

• 從右鍵菜單的TortoiseSVN子菜單中調用

• 從屬性頁中調用

• 在更新結束后,從進度對話框中調用。在這里,日志對話框只顯示你上一次更新以來的版本變化。

• From the repository browser

版本日志動作

頂部面板有個動作列,包含了此版本的動作概要圖標。有四個不同的圖標,每個都在自己的列顯示。

  • 如果某個版本修改了文件或目錄,已修改 圖表就會在首列顯示。
  • 如果某個版本增加了文件或目錄,已增加 圖表就會在第二列顯示。
  • 如果某個版本刪除了文件或目錄,已刪除 圖表就會在第三列顯示。
  • 如果某個版本替換了文件或目錄,已替換 圖標就會在第四列顯示。
  • If a revision moved or renamed a file or directory, the moved icon is shown in the fourth column.(移動或重命名)
  • If a revision replaced a file or directory by moving/renaming it, the move replaced icon is shown in the fourth column.(替換)
  • If a revision merged a file or directory, the merged icon is shown in the fourth column.(合並)
  • If a revision reverse merged a file or directory, the reverse merged icon is shown in the fourth column.(逆合並)

與工作副本比較Compare with working copy

將你的工作版本與選中的版本進行比較。默認的比較工具是與 TortoiseSNV 一同發布的 TortoiseMerge,如果日志對話框是針對文件夾的,那么就會出現一個被修改的文件的列表,你可以單獨地查看每個文件所做的修改。

與工作基礎版本比較並追溯Compare and blame with working BASE

追溯文件的選中版本與你工作的 BASE 版本,使用可視化差異工具顯示差異。

以標准差異文件顯示改變Show changes as unified diff

將選中的版本作為單一差異文件(GNU補丁格式)查看。相對於可視化的文件比較器,它更難閱讀,但它將所有的變化顯示在一個格式更為緊湊的文件中。If you hold down the Shift key when clicking on the menu item, a dialog shows up first where you can set options for the unified diff. These options include the ability to ignore changes in line endings and whitespaces.(按住shift可以進行非空格和結尾字符比較)

與前一版本比較Compare with previous revision

比較選中的版本和以前版本。它與比較工作副本類似。對於文件夾,這個選項首先會顯示已修改的文件對話框讓你選擇要比較的文件。

與前一版本比較並追溯Compare and blame with previous revision

顯示修改的文件對話框讓你選擇文件。追溯選中的版本和前一版本,並使用可視化比較工具顯示差異。(僅適用於文件夾)

保存版本至... Save revision to...

將選中的版本保存成文件,你可以得到一份該文件的舊版本。(僅適用於文件)

打開 / 打開方式... Open / Open with...

用默認查看器或你指定的程序打開選中文件的選中版本。(僅適用於文件)

追溯... Blame...

追溯文件直到選中的版本。(僅適用於文件)

瀏覽版本庫Browse repository

打開版本庫瀏覽器,基於選中的版本,在版本庫中檢查選中的文件或目錄。

從版本創建分支/標記Create branch/tag from revision

從選中的版本建立一個分支/標記。這個選項很有用。比如: 如果你忘記建立標記,並且提交了某些你不想使其進入發行版的修改。

更新項目至版本Update item to revision

將你的工作副本更新到選中的版本。如果你想要你的工作副本折返到過去的某個時間,或者在版本庫中有一系列提交而你想每次只更新工作副本一小步,那這個功能就很好用。你最好是更新工作副本的整個目錄而不是單一某個文件,因為如果只更新某個文件,否則你的工作副本就可能不一致。如果你想要永久撤銷先前的更改,使用 復原到此版本Revert to this revision

復原到此版本Revert to this revision

恢復到某個以前的版本。如果你做了多處修改,然后決定要返回到版本 N,你就可以使用這個命令。恢復的修改位於你的工作副本,在你提交之前,並不會影響版本庫。注意,這將會丟棄從那個版本以來的所有修改,使用選中的版本來替換文件/文件夾。如果你的工作副本處於未修改的狀態,在執行此操作后,工作副本將會顯示為已修改。如果你已經進行了本地修改,這個命令將會把撤銷的改變合並至你的工作副本中。內部的動作是 Subversion 對選中版本之后的修改內容執行了反向合並,撤銷這些先前提交產生的影響。如果在執行這個動作后你察覺到你需要撤銷這次撤銷並且讓工作副本返回到先前沒有修改的狀態,你應該在 Windows 資源管理器中使用 TortoiseSVN → SVN 還原, 這個命令將會丟棄本次撤銷動作帶來的修改。如果你只是想看看某個文件或者文件夾在先前的版本是什么樣子,使用 更新至版本 或 保存版本為... 功能替代此操作。

復原此版本作出的修改Revert changes from this revision

還原選中版本所做的修改。還原的內容只在你的工作副本中,所以此操作完全不會影響版本庫!要注意的是,這個操作僅僅還原該版本中的修改。不是將整個文件替換成選中的那個版本。它對於已經做過其它無關修改的還原早期修改非常有用。如果你的工作副本處於未修改的狀態,在執行此操作后,工作副本將會顯示為已修改。如果你已經進行了本地修改,這個命令將會把撤銷的改變合並至你的工作副本中。內部的動作是 Subversion 對這個版本的修改內容執行了反向合並,撤銷先前提交產生的影響。你可以使用上文復原到此版本中描述的撤銷這次撤銷。

合並版本到... Merge revision to...

合並選中的版本到不同的工作副本。可以通過文件夾選擇對話框來確定合並到哪一個工作副本中,但是此操作沒有沖突對話框,也沒有嘗試測試合並的機會。合並到未修改的工作副本是一個好主意,這樣當合並不成功時你可以還原工作副本。當你想要將某個分支上選中的版本合並至其他分支時,這個功能很有用。

檢出... Checkout...

檢出你選擇的目錄的選中版本,創建一個全新副本。它彈出對話框,讓你確認URL和版本,並且選擇保存的位置。

導出... Export...

導出選擇的文件/目錄的選中版本。它彈出對話框,讓你確認URL和版本,選擇導出位置。

編輯作者 / 日志信息Edit author / log message

編輯之前提交時的日志信息或是作者。

顯示版本屬性Show revision properties

查看和編輯任何版本屬性,不僅僅是日志信息和作者。

復制到剪貼板Copy to clipboard

將選中版本的詳細日志信息復制到剪貼板。它會復制版本號,作者,日期,日志信息,以及每個版本的改變項目列表。

查找日志信息... Search log messages...

在日志信息中搜索你輸入的的文字。這個操作搜索日志信息,也搜索由Subversion建立的提交行為總結(最底部的面板中的內容)。搜索大小寫無關。

Create code collaborator(合作者) review...

This menu is shown only if the SmartBear code collaborator tool is installed. When invoked for the first time, a dialog is shown prompting the user to enter user credentials for both code collaborator and SVN. Once the settings are stored, the settings dialog is no longer shown when the menu is invoked, unless the user holds Ctrl while executing the menu item. The configuration and the chosen revision(s) are used to invoke the code collaborator graphical user interface client, which creates a new review with the selected revisions.

如果你使用Ctrl組合鍵一次選中了兩個版本,右鍵菜單有所改變:

比較版本差異Compare revisions

使用可視化差異比較工作比較兩個選中的版本。默認的比較工作是與TortoiseSVN一起提供的TortoiseMerge。

如果你是針對文件夾選中這個選項,則會彈出一個對話框列出修改過的文件,提供了更多的差異比較選項。

追溯版本Blame revisions

追溯兩個版本,並使用可視化差異工具顯示差異。

以標准差異文件顯示修改Show differences as unified diff

使用單一差異文件顯示差異。這對文件和文件夾都有效。

復制到剪貼板Copy to clipboard

如前所述將日志消息復制到剪貼板。

查找日志信息... Search log messages...

如前所述可以搜索日志消息。

如果你用 Ctrl 或 Shift 組合鍵選擇了兩個或多個版本,If you select two or more revisions (using the usual Ctrl or Shift modifiers)右鍵菜單將有一個選項,可以讓你還原這些選中的版本中的修改。這是一次性還原一組版本中修改的最簡方法。

你也可以合並選中的版本到別的工作副本,就像上面描述的那樣。

如果所有選中的版本作者是相同的,你可以同時修改這些版本的作者。

The bottom pane of the Log dialog also has a context menu that allows you to

顯示改變Show changes

顯示選中的文件在選中的版本所做的更改。

追溯改變Blame changes

追溯選中文件的選中版本與前一個版本,使用可視化差異工具顯示差異。

以標准差異格式顯示改變Show as unified diff

以標准差異格式顯示改變。這個菜單條目只對顯示為已修改的文件有效。

打開 / 打開方式... Open / Open with...

用默認查看器或你指定的程序打開選中文件的選中版本。

追溯... Blame...

打開追溯對話框,你可以追溯到選中的版本。

復原此版本作出的修改Revert changes from this revision

還原選中文件的選中版本所作的變更。

顯示屬性Show properties

查看選中項的Subversion屬性。

顯示日志Show log

顯示選中的單個文件的版本日志。

取得合並日志Get merge logs

顯示被選中的單個文件的版本日志,包括合並修改。

保存版本至... Save revision to...

將選中的版本保存成文件,你可以得到一份該文件的舊版本。

導出... Export...

Export the selected items in this revision to a folder, preserving the file hierarchy.

When multiple files are selected in the bottom pane of the Log dialog, the context menu changes to the following:(如果你選擇了多個文件)

保存版本至... Save revision to...

將選中的版本保存成文件,你可以得到一份該文件的舊版本。

Show multiple changes...多重變化顯示

Show changes made in the selected revision for the selected files. Note that the show changes functionality is invoked multiple times, which may bring up multiple copies of your selected diff tool, or just add a new comparison tab in your diff tool. If you have selected more than 15 files, you will be prompted to confirm the action.(超過15個文件,會讓你確認,否則都用比較工具打開)

打開多個本地項目... Open multiple local...

This will open local working copy files that correspond to your selected files using the application that is registered for the extension. [The behavior is the one you would get double-clicking the working-copy file(s) in Windows explorer]. Depending on how your file extension is associated to an application and the capabilities of the application, this may be a slow operation. In the worst case, new instances of the application may be launched by Windows for each file that was selected. (用默認關聯的程序打開本地文件)

If you hold Ctrl while invoking this command, the working copy files are always loaded into Visual Studio. This only works when the following conditions are met: Visual Studio must be running in the same user context while having the same process integrity level [running as admin or not] as TortoiseProc.exe. It may be desirable to have the solution containing the changed files loaded, although this is not strictly necessary. Only files that exist on disk with extensions [.cpp, .h, .cs, .rc, .resx, .xaml, .js, .html, .htm, .asp, .aspx, .php, .css and .xml] will be loaded. A maximum of 100 files can be loaded into Visual Studio at one time, and the files are always loaded as new tabs into the currently open instance of Visual Studio. The benefit of reviewing code changes in Visual Studio lies in the fact that you can then use the built-in code navigation, reference finding, static code analysis and other tools built into Visual Studio. (按住Ctrl后可以用Visual Studio打開)

導出... Export...

Export the selected files/folder at the selected revision. This brings up a dialog for you to confirm the URL and revision, and select a location for the export.

你可能會注意到,我們有時候說改變(changes),有時候說差異(differences)。它們的區別在哪兒?

Subversion 使用版本號代表 2 種不同的東西。版本通常表示版本庫在某一個時間點的狀態,但它也可以表示創建該版本時的更改集合,例如 "在 r1234 完成" 表示在 r1234 提交的更改實現了 X 功能。為了避免混淆,我們使用兩個不同的術語。

如果你選擇了兩個版本 N 和 M,上下文菜單會顯示這兩個版本的差異。用 Subversion 術語說,就是diff -r M:N。

如果你選擇了一個版本 N,上下文菜單會顯示這個版本的改變。用 Subversion 術語說,就是diff -r N-1:N 或 diff -c N。

底部面板顯示在所有選中版本中被修改的文件,所以右鍵菜單通常會提供顯示改變。

獲取更多的日志信息

日志對話框並不總是顯示所有曾經的修改,日志不顯示的可能原因如下:

• 對於一個大的庫,可能存在幾百上千個改動,全部得到它們可能要花上很久的時間。通常你只關心最近的修改。默認情況下,日志消息限制只獲取100條,但你可以在TortoiseSVN → 設置(TortoiseSVN → Settings)中修改這個值

• 當復制/重命名(Stop on copy/rename)時停止復選框被選中時, 如果選中的文件或文件夾是從版本庫中的其他地方復制而來的,顯示日志將停止在該點。這對於查看分支(或標記)時很有用,因為它會停在分支的根節點上,可以快速查看該分支的修改。

一般情況下你可以不要勾選它。 TortoiseSVN會記住它的狀態,以改進性能。

如果你在從合並對話框中調用的顯示日志對話框,那么這個復選框默認將總是選中的。這是由於合並通常都是查看分支中的修改, 獲取分支的根之前的日志在這種情況下通常沒有什么意義。

注意,Subversion當前是用復制/刪除來實現重命名的,所以重命名一個文件或文件夾也會造成日志顯示停止(如果選擇了復制/重命名時停止)在該點。如果你要查看更多的日志信息,點擊下100個(Next 100),以獲取下100個日志信息。如果有需要你可以多次重復這個操作。這個按鈕旁邊的是一個多功能按鈕,它可以記住上一次你要它進行的操作。點擊它上面的箭頭,可以看到更多的選項。

如果你要查詢指定范圍(Show Range ...)的版本,使用顯示范圍 ...。這會出現一個對話框,要求輸入開始和結束的版本。

如果你要查詢從最新版本直到版本1的所有的日志消息,使用顯示所有(Show All)。

當日志對話框顯示后有其他人進行了提交的情況下,可以單擊 F5 鍵來刷新最新的版本

單擊 Ctrl-F5 鍵來刷新日志緩存

當前工作副本的版本

因為日志對話框從最新版本開始顯示日志,而不是從當前工作副本的版本開始。還未被更新至工作副本中的版本的日志消息也經常會顯示出來。為了使其更清楚,符合當前工作副本版本的提交信息使用粗體顯示。

當你顯示文件夾的日志時,高亮的版本是此文件夾中的最高版本,這就需要遍歷工作副本。遍歷操作在

單獨的進程中進行,因此不會使顯示日志有延遲,但是這樣的結果就是高亮也許不會立刻顯示出來。

合並跟蹤特性

Subversion 1.5 及以后的版本使用屬性保留合並記錄。關於已合並的修改,我們可以獲得更詳細的歷史。例如,你在分支中開發了一個新特性並且將此分支合並到主干,此特性開發將會以一次合並提交的形式顯示在主干的日志中,即使在分支開發中可能有 1000 次提交。

如果你想查看此次提交中有哪些版本被合並的詳細信息,選中 包含合並版本。這樣將會再次獲取日志信息,同時也會插入被合並的版本的日志信息。被合並的版本使用灰色顯示,因為它們代表在版本庫中不同部分的修改。

當然,合並絕非簡單!在分支上進行特性開發過程中,也許不時的會將主干的內容合並至分支使分支保持同步。所以分支的合並歷史將會包含其它層次的合並歷史。這些不同層次的信息在日志對話框中使用不同的縮進級別顯示。

修改日志消息和作者

版本屬性完全不同於其它的 Subversion 屬性。版本屬性是關聯於版本庫中的特定版本號的描述項目,例如日志消息,提交日期和提交者名稱(作者)。

有時你可能想要修改你曾經輸入的日志消息,也許是因為有拼寫錯誤或是你想改進消息內容,或是其他別的原因。偶爾你還想修改提交者,可能是你忘了設置認證等原因。

Subversion lets you change revision properties any time you want. But since such changes can't be undone (those changes are not versioned) this feature is disabled by default. To make this work, you must set up a pre-revprop-change hook.

一旦你按需要為服務器設置了鈎子,你就可以使用日志對話框頂部面板的右鍵菜單來修改任意版本的作者和日志信息(或其它版本屬性)了。你也可以使用中間面板的右鍵菜單編輯日志信息。

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

Since TortoiseSVN keeps a cache of all the log information, edits made for author and log messages will only show up on your local installation. Other users using TortoiseSVN will still see the cached (old) authors and log messages until they refresh the log cache.

過濾日志信息

如果你只想要顯示上千條日志中你所感興趣的日志,你可以使用日志對話框頂部的過濾器控件。開始和結束日期控件允許你查看指定日期范圍內的輸出。查找框幫你查出含有指定內容的信息。

單擊查找圖標可以選擇在哪些信息中查找,並選擇 正則表達式 模式。正常情況下你可能只需要進行簡單的子字符串查找,但如果你需要更有彈性的查找條件,就可以使用正則表達式。如果將鼠標在文本框上停留一會,就會出現一個工具提示條顯示一些如何使用正則表達式功能和子字符串功能的使用幫助。過濾器檢查字符串是否與日志內容匹配,並且只有 匹配 過濾字符串的條目才會顯示。

Simple sub-string search works in a manner similar to a search engine. Strings to search for are separated by spaces, and all strings must match. You can use a leading - to specify that a particular sub-string is not found (invert matching for that term), and you can use! at the start of the expression to invert matching for the entire expression. You can use a leading + to specify that a sub-string should be included, even if previously excluded with a -. Note that the order of inclusion/exclusion is significant here. You can use quote marks to surround a string which must contain spaces, and if you want to search for aliteral quotation mark you can use two quotation marks together as a self-escaping sequence. Note that the backslash character is not used as an escape character and has no special significance in simple sub-string searches. Examples will make this easier:

要注意的是,這些過濾器只對已經獲取的信息有效。它們並不從版本庫中下載信息。

在底部的面板選中 僅顯示影響的路徑 復選框可以過濾路徑名稱。影響的路徑就是那些用來顯示日志的路徑。如果是獲取文件夾的日志,就是指文件夾中的或者以下的任何內容。對於文件,就是指該文件。正常情況下,路徑列表會顯示受本次提交影響的其它路徑,但是是灰色的。如果選中該復選框,這些路徑就會被隱藏。

有時,工作規范要求日志消息符合一個特定的格式,這就意味着描述修改的文本不能在頂部面板中以簡短的摘要形式顯示。屬性 tsvn:logsummary 可以用於提取日志消息的一部分顯示在頂部面板中。

在版本庫瀏覽器中沒有日志格式化(Repository Browser)

Because the formatting depends upon accessing Subversion properties, you will only see the results when using a checked out working copy. Fetching properties remotely is a slow operation, so you will not see this feature in action from the repo browser.

統計信息

統計按扭,可以顯示一些你感興趣的關於日志對話框中版本的信息。可以顯示已經有幾個作者做了工作,他們各提交了幾次,按周的統計,等等。現在,你可以發現一個大概情況: 誰最勤快,誰偷懶。;-)

統計頁

此頁可以提供所有你可以想到的數據,特別是周期和包括的版本數,還有一些最大/最小/平均值。

作者提交次數統計頁

此圖用簡單柱狀圖、疊加柱狀圖或餅圖顯示了哪些作者已經在項目中活躍了。

注意,統計只包括了日志對話框中的那段時期。如果日志對話框中只顯示一個版本,那么統計就沒有什么意義了。

離線方式

如果服務器不可用,並且你已經啟用了日志緩存,那么你可以在離線方式下使用日志對話框和版本圖。它使用緩存中的數據,使得你可以繼續工作,盡管信息可能不是最新的甚至不完整。

這里你有三個選擇:

立即離線

使用離線方式完成當前操作,但當下次需要日志數據時重新嘗試鏈接版本庫。

永久離線

保持離線方式,直到特別要求進行版本庫檢查。

取消

如果你不想使用失效的數據來繼續操作,就取消吧。選中設為默認值復選框使用你本次的選項作為以后的選擇,避免再次顯示此對話框。你可以通過TortoiseSVN → 設置修改(或刪除)此默認值。

刷新視圖

如果你想再次檢查服務器是否有新的日志消息,可以使用 F5 鍵來刷新視圖。如果使用日志緩存(默認啟用),這將會檢查版本庫是否有新的消息並且只獲取新的消息。如果日志緩存處於離線模式,這將會嘗試恢復在線模式。

如果使用日志緩存並且你認為消息內容或者作者可能被更改,你可以使用 Shift-F5 或 Ctrl-F5 來從服務器重新獲取顯示的消息並更新日志緩存。注意: 此動作只影響當前顯示的消息並不會影響此版本庫的全部緩存。

查看差異

在項目開發中,有一個很常用的要求就是查看更改。可能是你要求查看同一文件的兩個版本之間的差異,或者是查看兩個獨立的文件的差異。TortoiseSVN 自帶了一個工具叫 TortoiseMerge 用來查看文本文件的差異。也有一個叫 TortoiseIDiff 的工具來查看圖像文件的差異。當然,你可以根據你自己的

喜好來選擇比較差異的工具。

文件差異

本地修改(Local changes)

如果你想看到你的本地副本有哪些更加,只用在資源管理器中右鍵菜單下選TortoiseSVN → 比較差異。(TortoiseSVN → Diff.)

與另外一個分支/標簽之間的差異Difference to another branch/tag

如果你想查看主干程序(假如你在分支上開發)有哪些修改或者是某一分支(假如你在主干上開發)有哪些修改,你可以使用右鍵菜單。在你點擊文件的同時按住Shift鍵,然后選擇TortoiseSVN → URL比較(Difference to another branch/tag)。在彈出的對話框中,將特別顯示將與你本地版本做比較的版本的URL地址。

你還可以使用版本庫瀏覽器,選擇兩個目錄樹比較,也許是兩個標記,或者是分支/標記和最新版本(Compare revisions)。右鍵菜單允許你使用比較版本來比較它們。

與歷史版本的比較差異Difference from a previous revision

如果你想查看某一特定版本與本地副本之間的差異,使用顯示日志對話框,選擇要比較的版本,然后選擇在右鍵菜單中選與本地副本比較差異(Compare with working copy)

如果你想查看上一次提交的版本和你的工作副本之間的差異,假設你的工作副本沒有被修改,只要用右鍵單擊文件。然后選擇 TortoiseSVN → 與前一版本比較(TortoiseSVN → Diff with previous version)。這樣將會對上一次提交時間(記錄在你的工作副本中)之前的版本和工作基礎版本進行差異比較。它將會顯示工作副本中此文件變成當前狀態的那一次修改。它不會顯示比工作副本更新的修改。

兩個歷史版本的比較Difference between two previous revisions

如果你要查看任意已提交的兩個歷史版本之間的差異,在版本日志對話框中選擇你要比較的兩個版本(一般使用 Ctrl-更改),然后在右鍵菜單中選比較版本差異

如果你在文件夾的版本日志中這樣做,就會出現一個比較版本對話框,顯示此文件夾的文件修改列表。

提交所有修改All changes made in a commit

如果你要在一個視窗中查看某一版本的所有更改,你可以使用統一顯示所有比較 (GNU 片段整理)。它將顯示所有修改中的部分內容。它很難顯示一個全面清晰的比較,但是會將所有更改都集中顯示出來。在版本日志對話框中選擇某一版本,然后在右鍵菜單中選擇統一顯示所有比較。(Show Differences as Unified-Diff)

文件差異Difference between files

如果你要查看兩個不同文件之間的差異,你可以直接在資源管理器中選擇這兩個文件(一般使用Ctrl-modifier),然后右鍵菜單中選TortoiseSVN → 比較差異。(TortoiseSVN → Diff.)

If the files to compare are not located in the same folder(如果比較的兩個文件不在同一個文件夾,分次選擇), use the command TortoiseSVN→ Diff later (TortoiseSVN → Diff later選擇第一個文件)to mark the first file for diffing, then browse to the second file and use TortoiseSVN → Diff with "path/of/marked/file". (TortoiseSVN → Diff with "path/of/marked/file".選擇第二個)To remove the marked file, use the command TortoiseSVN → Diff later again, but hold down the Ctrl-modifier while clicking on it.(按住Ctrl同時按下TortoiseSVN → Diff later取消選擇)

WC文件/文件夾與URL之間的比較差異Difference between WC file/folder and a URL

如果你要查看你本地副本中的某個文件與任意 Subversion 版本庫中的某個文件之間的差異,你可以之間在資源管理器中操作,選中文件然后按下 Shift 鍵,同時右鍵單擊顯示右鍵菜單。選中TortoiseSVN → 與 URL (TortoiseSVN → Diff with URL)比較。你可以對工作副本文件夾做相同的操作。TortoiseMerge 通過與顯示補丁文件相同的方法顯示文件夾差異 - 你可以通過一個已修改文件列表分別查看某個文件。

追溯信息之間的比較差異Difference with blame information

如果你要查看的不僅是比較差異而且包括修改該版本的作者,版本號和日期,你可以在版本日志對話框中綜合比較差異和追溯信息。

比較文件夾差異Difference between folders

TortoiseSVN 自帶的內置工具不支持查看多級目錄之間的差異,但你可以使用支持該功能的外置工具來替代。

如果你已經配置了第三方的比較工具,你可以在選擇比較差異命令的時候按下 Shift 鍵來選擇替代工具。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM