手冊

附錄 F. 實作細節

目錄

圖示覆蓋層

本附錄包含更詳細的 TortoiseSVN 功能實作討論。

圖示覆蓋層

每個檔案和資料夾都有一個 Subversion 狀態值,由 Subversion 函式庫回報。在命令列用戶端中,這些狀態值以單個字母代碼表示,但在 TortoiseSVN 中,它們以圖形方式使用圖示覆蓋層顯示。由於覆蓋層的數量非常有限,因此每個覆蓋層可能代表多個狀態值之一。

衝突覆蓋層用於表示 conflicted 狀態,其中更新或切換導致本機變更與從儲存庫下載的變更之間發生衝突。它也用於指示 obstructed 狀態,當操作無法完成時可能會發生這種情況。

已修改覆蓋層表示 modified 狀態,即您已進行本機修改;merged 狀態,即來自儲存庫的變更已與本機變更合併;以及 replaced 狀態,即檔案已被刪除並替換為另一個同名但不同的檔案。

已刪除覆蓋層表示 deleted 狀態,即項目已排程刪除;或 missing 狀態,即項目不存在。當然,遺失的項目本身不能有覆蓋層,但如果其子項目之一遺失,則可以標記父資料夾。

已加入覆蓋層僅用於表示 added 狀態,即項目已加入版本控制。

在 Subversion 中覆蓋層用於表示處於 normal 狀態的項目,或狀態未知的版本控制項目。由於 TortoiseSVN 使用背景快取處理程序來收集狀態,因此覆蓋層可能需要幾秒鐘才能更新。

需要鎖定覆蓋層用於指示檔案何時設定了 svn:needs-lock 屬性。

已鎖定覆蓋層用於本機工作副本持有該檔案的鎖定時。

已忽略覆蓋層用於表示處於 ignored 狀態的項目,這可能是由於全域忽略模式或父資料夾的 svn:ignore 屬性所致。此覆蓋層是可選的。

未版本控制覆蓋層用於表示處於 unversioned 狀態的項目。這是版本控制資料夾中的項目,但本身不受版本控制。此覆蓋層是可選的。

如果項目的 Subversion 狀態為 none(項目不在工作副本中),則不顯示任何覆蓋層。如果您選擇停用已忽略未版本控制覆蓋層,則這些檔案也不會顯示任何覆蓋層。

一個項目只能有一個 Subversion 狀態值。例如,一個檔案可能在本機已修改,並且可能同時標記為刪除。Subversion 會傳回單個狀態值 - 在這種情況下為 deleted。這些優先順序在 Subversion 本身中定義。

當 TortoiseSVN 遞迴顯示狀態時(預設設定),每個資料夾都會顯示一個覆蓋層,反映其自身狀態及其所有子項的狀態。為了顯示單個摘要覆蓋層,我們使用上面顯示的優先順序來確定要使用的覆蓋層,其中衝突覆蓋層具有最高優先順序。

實際上,您可能會發現並非所有這些圖示都在您的系統上使用。這是因為 Windows 允許的覆蓋層數量限制為 15 個。Windows 使用其中 4 個,其餘 11 個可供其他應用程式使用。如果沒有足夠的覆蓋層插槽可用,TortoiseSVN 會盡力成為一個良好公民 (TM),並限制其覆蓋層的使用,以便讓其他應用程式有機會使用。

由於有適用於其他版本控制系統的 Tortoise 用戶端,因此我們建立了一個共享元件,負責顯示圖示覆蓋層。技術細節在這裡並不重要,您只需要知道這個共享元件允許所有 Tortoise 用戶端使用相同的覆蓋層,因此安裝多個 Tortoise 用戶端不會用完 11 個可用插槽的限制。當然,有一個小缺點:所有 Tortoise 用戶端都使用相同的圖示覆蓋層,因此您無法通過圖示覆蓋層判斷工作副本正在使用哪個版本控制系統。

  • 正常已修改衝突始終載入且可見。

  • 已刪除盡可能載入,但如果沒有足夠的插槽,則會回退到已修改

  • 唯讀盡可能載入,但如果沒有足夠的插槽,則會回退到正常

  • 已鎖定盡可能載入,但如果沒有足夠的插槽,則會回退到正常

  • 已加入盡可能載入,但如果沒有足夠的插槽,則會回退到已修改

TortoiseSVN 首頁