TortoiseSVN Logo

記錄快取與儲存庫 UUID

發佈於 2008 年 8 月 17 日

擷取緩慢或非常大的儲存庫的記錄可能需要相當長的時間。當然,這需要您連線到儲存庫。如果您沒有連線,則無法顯示記錄訊息 - 如果網路中斷或您身處甚至無法存取網路的地方,這非常惱人。

為了至少部分解決這個問題,TortoiseSVN 1.5 可以快取來自 Subversion 儲存庫的記錄訊息。此功能以透明方式實作,這表示您無需執行任何操作即可使其運作。您可能會注意到的是,一旦您顯示了儲存庫的所有記錄訊息,下次記錄對話方塊就會快得多。

如果您想測試此功能,您可以顯示 TortoiseSVN 儲存庫的記錄。按一下記錄對話方塊中的「顯示全部」按鈕以取得所有記錄訊息。您會注意到擷取所有訊息需要一段時間。如果您然後關閉記錄對話方塊並再次針對相同的 URL 啟動它,您可以按一下「顯示全部」按鈕,所有訊息都會從記錄快取中擷取。

如果您無法連線到儲存庫,記錄對話方塊將會顯示一個對話方塊,您可以在其中選擇「離線工作」,也就是說,它將不再嘗試連線到儲存庫,而僅使用快取
logoffline

但是,有一個問題:記錄快取依賴於您的所有儲存庫都分配了不同的 UUID。
如果您在屬性對話方塊(Explorer 內容選單「屬性」)中擁有它們的工作副本,則可以看到儲存庫的 UUID
repouuid
記錄快取需要 UUID 來區分不同的儲存庫,這些儲存庫當然具有不同的記錄訊息。記錄快取無法僅使用 URL 來區分儲存庫的原因是 URL 無法提供該資訊。

例如,像 https://example.com/svn/trunk 這樣的 URL 會清楚地表明儲存庫位於 https://example.com/svn。因為我們可以假設 'svn' 不是專案名稱。

但是像 https://example.com/svn/project/trunk 這樣的 URL 可能表示它指向 'project' 的儲存庫,但也可能表示 'svn' 只有一個儲存庫,而 'project' 只是該儲存庫內的一個資料夾。因此,兩個 URL https://example.com/svn/project/trunkhttps://example.com/svn/otherproject/trunk 可能指向同一個儲存庫,或指向兩個不同的儲存庫。

這就是為什麼記錄快取必須依賴於每個儲存庫的儲存庫 UUID 都是不同的。

現在,有些人犯了透過簡單複製預設(空的)儲存庫來建立新儲存庫的錯誤。透過這樣做,所有儲存庫都具有相同的 UUID!是的,這是一個很大的錯誤:它被稱為 UUID 是有原因的:'U' 代表「唯一」(Unique)。這將完全混淆記錄快取,並且您將會看到很多崩潰報告對話方塊。
為了修正這個問題,您必須為每個儲存庫設定唯一的 UUID。從官方 Subversion 套件取得 svnadmin 工具,並在每個儲存庫上執行 svnadmin setuuid REPOS_PATH

如果您無法直接存取儲存庫,或者由於某些其他原因而無法變更 UUID,您可以在 TortoiseSVN 設定對話方塊中停用記錄快取:logcachesettings

在上面的螢幕截圖中,您可能會注意到「允許模糊不清的 URL」選項。既然我已經告訴您快取依賴於 UUID 的不同,為什麼它也依賴於 URL 呢?
比較 URL(即簡單字串)比詢問儲存庫或工作副本的儲存庫 UUID 快得多。因此,如果可能,快取也會使用 URL。例如,如果快取知道 URL https://example.com/svn/project/trunk 指向特定的儲存庫,它也知道 URL https://example.com/svn/project/trunk/subfolder 指向完全相同的儲存庫,因為不可能在儲存庫內擁有儲存庫。

「允許模糊不清的 URL」選項適用於同一個 URL 用於不同儲存庫的情況 - 當然,這些情況非常罕見。我們遇到問題的一種情況是 svnbrigde。這是一個不錯的工具,可讓您使用 SVN 用戶端存取 Microsoft Team System 儲存庫。但是該工具的舊版本讓所有儲存庫都可以在相同的 URL 上供 SVN 用戶端存取。
一旦我們與 svnbridge 開發人員討論了這個問題,他們幾乎立即準備好了一個版本,該版本為不同的 Team System 儲存庫提供了不同的 URL。因此,使用最新版本的 svnbridge,您不應該遇到該問題。但是,如果您由於某些原因無法更新您的 svnbridge 版本,則必須啟用「允許模糊不清的 URL」選項。