TortoiseSVN Logo

常見問題

目錄

安裝與升級

廣告

覆蓋圖示

一般問題

我該如何...

錯誤訊息


安裝與升級

升級 TortoiseSVN 時,我是否必須先解除安裝現有版本?

不。您可以直接在新版本之上安裝舊版本。安裝程式會自動負責先解除安裝舊版本。但是您必須在安裝程式完成後重新啟動電腦!或者至少您必須登出並重新登入。

安裝 TortoiseSVN 是否需要管理員權限?

是的,您需要擁有管理員權限才能安裝 TortoiseSVN,或至少擁有管理員權限安裝的權利。

但是在安裝 TortoiseSVN 之後,您可以在沒有管理員權限的情況下使用它。

在使用 TortoiseSVN 之前,我需要安裝 Subversion 嗎?

不。TortoiseSVN 隨附了存取儲存庫所需的一切。只有在您想要架設伺服器時,才需要 Subversion 套件。

我該如何解除安裝 TortoiseSVN?

只需從 Windows 控制面板中的「新增/移除程式」解除安裝即可。這完全不會影響您的儲存庫或工作副本。

我的機器上停用了 MSI 安裝。有 .exe 安裝程式嗎?

.exe 安裝檔案沒有幫助。如果 MSI 安裝在您的機器上真的被停用,那麼您也沒有管理員權限。而且您需要這些權限才能安裝 TortoiseSVN(shell 擴充功能需要管理員權限才能安裝)。但首先請確認 MSI 安裝是否真的被停用 - 這只有在您的網域管理員停用它的情況下才有可能。

為什麼你們使用 MSI 而不是 exe 或完全不安裝程式?

我們使用 MSI 作為安裝程式而不是其他程式有幾個原因

  • 它是開放的。每個人都可以使用像 Orca 這樣的 MSI 工具來查看我們在做什麼。
  • 如果您願意,可以輕鬆地根據您的特殊需求調整現有的 MSI。有一些工具可以讓您手動編輯 MSI。您無法使用 exe 安裝程式執行此操作。
  • 它以 SYSTEM 權限執行,而不僅僅是例如管理員。這很重要,因為 TortoiseSVN 是一個 shell 擴充功能,它要求我們建立和修改使用者帳戶無法存取的登錄檔機碼(這在啟用 UAC 的 Vista 上尤其重要)。
  • 透過 GPO,可以輕鬆地將 MSI 分發到網域中的多台電腦/使用者。所有其他安裝程式都將要求網域管理員首先將該安裝程式「包裝」在 MSI 中才能執行此操作。
  • MSI 是安裝 Windows 應用程式的標準和建議方式。現在甚至需要它才能獲得 Microsoft 的「Certified for Vista」標誌。
  • 有一個很棒的開放原始碼工具可以用於建立 MSI 檔案:WiX,我們正在使用它。
  • MSI 負責已安裝模組的參考計數,這可以防止所謂的 dll 地獄
  • 由於我們必須向 shell 註冊 TortoiseSVN,因此需要安裝程式。一個簡單的 exe 供您執行是行不通的。

安裝程式中止並顯示錯誤訊息

安裝無法成功的原因有很多

  • 「此安裝套件不受此處理器類型支援。請聯絡您的產品供應商。」 這表示您正嘗試在正常的 32 位元作業系統上安裝 64 位元版本的 TortoiseSVN。您需要下載並使用適用於您作業系統的正確 MSI 檔案。對於正常的 32 位元作業系統,請確認 MSI 檔案中沒有 x64
  • 「安裝程式在 TortoiseSVN 安裝完成之前中斷。您需要重新啟動安裝程式以再次嘗試」 然後使用者 SYSTEM 在安裝程式 MSI 所在的資料夾中沒有讀取/執行權限。您可以將 MSI 檔案移動到另一個位置,或授予使用者 SYSTEM 讀取和執行權限。
  • 「無法存取 Windows Installer 服務」 如果您在安全模式下執行 Windows,或者 Windows Installer 未正確安裝,則可能會發生這種情況。基本上,請檢查儲存 MSI 的資料夾是否已加密或壓縮
  • 「系統無法開啟指定的檔案裝置」,通常接著是 「安裝程式在安裝此套件時遇到意外錯誤。這可能表示此套件有問題。錯誤代碼為 2755」。這可能發生在以下情況
    • 安裝程式無法存取 Temp 目錄,或者機器的預設 Temp 目錄不乾淨或沒有足夠的空間來執行安裝程式。
    • 安裝程式正在透過對應的網路磁碟機在終端伺服器上執行。
    • 安裝程式無法在 Windows NT 系統環境中建立或寫入 Installer 目錄。
    • temp 資料夾和/或 MSI 檔案已加密/壓縮
    若要解決此問題,請清除 temp 資料夾,將安裝程式 MSI 檔案移動到您的本機硬碟,使用者 SYSTEM 在該硬碟上具有完整存取權限。
  • 「Windows Installer 服務無法安裝此安裝套件。您必須安裝包含較新版本 Windows Installer 服務的 Windows Service Pack。 您至少需要 MSI 安裝程式的第 3 版

安裝後,TortoiseSVN 沒有顯示出來,沒有可用的上下文選單

如果您使用的是 XP 或 Vista 64 位元,請確認您已安裝 x64 版本的 TortoiseSVN。由於這些作業系統版本上的檔案總管是 64 位元應用程式,因此它無法載入 32 位元版本的 TortoiseSVN。

不過,您仍然可以在這些作業系統版本上保留安裝 32 位元版本的 TortoiseSVN:它將會顯示在這些應用程式的 32 位元應用程式檔案開啟/儲存對話方塊中。

安裝後,檔案沒有 TortoiseSVN 上下文選單

此問題可能是由登錄檔中的權限設定所造成。請嘗試以下操作

  1. 使用 regedit 前往登錄檔編輯器。
  2. 點擊 HKEY_CLASSES_ROOT/*/​shellex/ContextMenuH​andlers/TortoiseSVN
  3. 觀察顯示存取被拒絕的錯誤訊息方塊。
  4. 在上面提到的機碼上按一下滑鼠右鍵,前往「權限」...
  5. 在權限對話方塊中,按一下「進階」
  6. 按一下「擁有者」索引標籤,按一下您的帳戶,然後按一下「套用」
  7. 按一下「確定」關閉對話方塊,按一下「新增...」
  8. 在文字區域中輸入您的帳戶名稱,然後按一下「確定」
  9. 按一下「確定」關閉權限對話方塊。
  10. 點擊 HKEY_CLASSES_ROOT/*/​shellex/ContextMenuH​andlers/TortoiseSVN
  11. 檢查是否沒有錯誤訊息方塊。

如果您在編輯登錄檔時遇到權限不足的問題,您可以下載 SysInternals PsTools Suite 並使用以下命令啟動 regedit 來解決此問題

PsExec.exe -i -d -s c:\windows\regedit.exe

覆蓋圖示

升級 TortoiseSVN 後,我的所有圖示覆蓋都消失了

這是某些升級的已知問題,特別是在 1.6.8 版本中已回報。如果您遇到這種情況,請嘗試執行修復安裝(並重新啟動電腦)。

如果這不起作用,請嘗試這些其他 FAQ 項目

為什麼圖示覆蓋沒有出現?

  • 您在安裝後當然重新啟動了您的電腦嗎?如果您還沒有,請立即執行。TortoiseSVN 是一個 Windows 檔案總管 Shell 擴充功能,它將與檔案總管一起載入。
  • 前往 TSVN 的設定,並至少為固定磁碟機啟用圖示覆蓋。安裝程式會自動為目前使用者執行此操作(無法為其他使用者執行...),但由於您使用的 TSVN 使用者與您安裝的使用者不同,因此您需要手動設定此設定。

覆蓋圖示出現了,但不是全部!

您可能會發現並非所有這些圖示都在您的系統上使用。這是因為 Windows 允許的覆蓋數量限制為 15 個。Windows 使用其中的 4 個,其餘 11 個可以供其他應用程式使用。如果您安裝了 OneDrive,則會再使用 5 個插槽。如果您然後安裝了另一個雲端硬碟工具,則這些插槽可能會被用完。TortoiseSVN 試圖成為「好公民 (TM)」?並限制其覆蓋的使用,以便讓其他應用程式有機會。

  • 「正常」、「已修改」和「衝突」始終載入且可見(如果可能!)。
  • 「已刪除」盡可能載入,但如果沒有足夠的插槽,則會退回到「已修改」。
  • 「唯讀」盡可能載入,但如果沒有足夠的插槽,則會退回到「正常」。
  • 只有在已載入少於 13 個覆蓋時才會載入「已鎖定」。如果沒有足夠的插槽,則會退回到「正常」。
  • 只有在已載入少於 14 個覆蓋時才會載入「已新增」。如果沒有足夠的插槽,則會退回到「已修改」。

您可以使用 regedit 查看 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 來檢查哪些其他應用程式正在使用覆蓋。

已知使用覆蓋的其他應用程式
  • Windows 本身。Vista 和 Win7 使用的比 XP 多。
  • OneDrive
  • GDrive
  • Mega
  • Dropbox
  • 許多其他

如果安裝了太多覆蓋處理常式,而 TortoiseSVN 沒有顯示任何覆蓋,您可以嘗試從登錄檔中刪除一些已安裝的處理常式。但在編輯登錄檔時請務必小心!

為什麼圖示僅在本地磁碟機上可見,而在網路磁碟機上不可見?

前往「設定」->「外觀」->「圖示覆蓋」,然後勾選您想要看到覆蓋圖示的磁碟機類型。請注意,為網路磁碟機啟用覆蓋不僅會減慢 TortoiseSVN 的速度,還會減慢整個系統的速度。

為什麼 SUBST 磁碟機上的覆蓋圖示搞砸了?

如果您的工作副本位於 SUBST 磁碟機上,則圖示可能會混亂。

問題的產生是因為快取嘗試同時擷取兩個「不同」位置的狀態,但這些位置實際上是相同的,因此同時擷取同一個工作副本的兩個狀態。

有一個簡單的方法可以解決此問題:只需從顯示覆蓋中排除原始路徑(設定->圖示覆蓋->排除路徑)。

例如,如果您已將 \\station\folder\wc 對應到 g:,則將 \\station\folder\wc* 作為排除模式。

讓覆蓋運作的另一種方法是將「狀態快取」設定從「預設」變更為「Shell」。

為什麼覆蓋圖示顯示錯誤的狀態?

有時您會發現覆蓋圖示未反映檔案和/或資料夾的真實狀態。通常,按下 F5 鍵就足以讓覆蓋圖示正確顯示(您可能必須等待幾秒鐘,直到快取再次擷取狀態)。

檔案總管左側的樹狀檢視完全是另一回事。無論您按下 F5 鍵多少次,它都不會更新覆蓋圖示。這是檔案總管的問題,超出了 TortoiseSVN 的範圍。

簡短說明:樹狀檢視始終顯示整個檔案總管樹狀結構,包括網路磁碟機和其他命名空間擴充功能。由於這些可能會非常慢(例如,慢速網路磁碟機),因此檔案總管樹狀結構不會一直要求覆蓋擴充功能更新覆蓋圖示。即使您告訴檔案總管資料夾已變更,並且應該相應地更新覆蓋圖示,它也不會這樣做。它會先自行檢查資料夾是否真的已變更,並且僅在它認為資料夾真的已變更時才更新覆蓋圖示。

現在,由於資料夾的 Subversion 狀態與資料夾本身無關,因此資料夾本身永遠不會真正變更(僅 .svn 資料夾內的一些檔案,而不是資料夾本身),因此檔案總管不會更新覆蓋圖示。

有一些技巧和變通方法可以讓檔案總管即使在左側樹狀檢視中也重新整理覆蓋圖示,但這些都是技巧和變通方法,顯然並非始終有效。

有一個通常有效的技巧,但它很慢,TortoiseSVN 無法即時使用該技巧 - 它只會使系統速度變慢太多。但是您可以透過在工作副本的根目錄上執行「清理」命令來手動觸發該技巧。在清理命令完成後,您必須等待幾秒鐘,讓樹狀檢視更新覆蓋圖示。

為什麼覆蓋圖示有時會變成隨機圖形?

Windows 圖示快取是一個相當有錯誤的生物。您可以透過以下方式之一解決此問題

  • 安裝 Microsoft 的 TweakUI 並執行重新建置圖示的選項。
  • 或增加圖示快取大小。前往 HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer 並新增一個名為 Max Cached Icons 的新字串值。預設值為 500 - 嘗試將其增加到 2048。
  • 或刪除 Windows 目錄中名為 ShellIconCache 的檔案。然後重新啟動電腦。
  • 在 TortoiseSVN 1.3.0 及更高版本中,您也可以透過從命令列呼叫 TortoiseProc 來重新建置圖示快取,例如 TortoiseProc.exe /command:rebuildiconcache

為什麼沒有「可更新」或「被其他人鎖定」的覆蓋圖示?

為了顯示這樣的覆蓋,TortoiseSVN 每次顯示覆蓋時都必須聯絡儲存庫。這會使檔案總管變得非常慢。伺服器通常需要幾秒鐘才能回應,有時甚至幾分鐘 - 您真的希望每次開啟版本控制資料夾時,檔案總管都會在發生這種情況時掛起嗎?

TortoiseSVN 的基本設計功能是,除非透過上下文選單項目之一明確要求,否則永遠不會聯絡儲存庫。即使有這個限制,保持快速回應仍然是一項艱鉅的工作。

如果您想查看哪些使用者在其工作副本中鎖定了檔案,或哪些檔案需要更新,請使用「檢查修改」對話方塊,然後按一下「檢查儲存庫」按鈕。

覆蓋圖示

當我右鍵點擊檔案時,CPU 使用率達到 100%。

每次我右鍵點擊檔案時,CPU 使用率都會達到 100%(在顯示右鍵選單時)。如果我從選單中選擇某些項目,CPU 使用率就會恢復正常。如果我右鍵點擊「空白處」,則 CPU 正常。發生了什麼事?

XP 包含一個已知錯誤,當您在某些設定下存取上下文選單時,會導致 CPU 使用率飆升至 100%。此錯誤會導致檔案複製操作停止、網路連線速度變慢以及串流媒體(例如,音訊、視訊)失真。若要解決此錯誤,您需要執行以下步驟來停用 GUI 的轉換效果

  1. 啟動「控制台顯示」小程式。
  2. 選取「外觀」索引標籤。
  3. 按一下「效果」,然後取消勾選「對選單和工具提示使用下列轉換效果」核取方塊。
  4. 按一下「確定」關閉所有對話方塊。

另一個通常有效的解決方案是在右鍵點擊以顯示上下文選單之前,先左鍵點擊檔案或資料夾。

我可以在網路目錄上建立本機儲存庫嗎?

您可以在網路共用上使用儲存庫,但只能作為單一使用者像使用本機硬碟一樣使用。下一個 FAQ 項目解釋了為什麼以這種方式共用儲存庫是一個壞主意 (TM)。除非您有真正迫切的理由將儲存庫保存在網路共用上,否則通常最好避免這樣做。

如果您真的需要存取網路共用上的儲存庫,您應該執行以下操作之一

  1. 使用以下語法使用磁碟機對應
    將 //server/shared 對應到 S
    file:///S:/repos(磁碟機代號前有 3 個前導斜線)
  2. 使用以下語法直接指定 UNC 路徑
    Subversion >= 1.2
    file://server/shared/repos(2 個前導斜線)
    Subversion < 1.2(奇怪的語法,我們知道)
    file://///server/shared/repos(5 個前導斜線)
    file:///\server/shared/repos(3 個斜線 + 反斜線)

但別說我們沒有警告您...

我可以將我的儲存庫保存在網路共用中,而不是架設伺服器嗎?

如果您需要多台電腦存取儲存庫,理論上您可以在網路共用上建立儲存庫,並使用 file:// 通訊協定存取它。實際上,建議這樣做,原因有四個

  1. 您正在授予所有使用者直接寫入權限,因此他們可能會意外刪除或損壞儲存庫檔案系統。
  2. 並非所有網路檔案共用通訊協定都支援 Subversion 所需的鎖定。有一天您會發現您的儲存庫已被微妙地損壞。
  3. 您必須以正確的方式設定存取權限。SAMBA 在這方面尤其困難。
  4. 如果一個人安裝了較新版本的用戶端,升級了儲存庫格式,那麼其他人將無法存取儲存庫,直到他們也升級到新的用戶端版本。

到目前為止,最好的方法是架設真正的伺服器程序(例如 Apache 或 svnserve),將儲存庫儲存在伺服器可以存取的本機檔案系統上,並透過網路提供儲存庫伺服器。這比您想像的要容易。《Subversion Book》中的第 6 章「伺服器設定」詳細介紹了這個過程。

我可以在網路共用上儲存工作副本嗎?

這取決於網路共用。但我們真的、真的敦促您不要這樣做!即使您使用的是 Windows 伺服器並使用這些網路共用,fcntl() 檔案鎖定也不是完全可靠的。而對於基於 Samba 的共用,一切都無法保證。這表示您將會獲得損壞的工作副本,然後您將會遺失資料!也許不是今天,也許不是明天,但總有一天會發生。

如果您真的必須在網路共用上儲存工作副本,請仔細查看 SQLite 專案的相應 FAQ 項目

我可以將不同的 Subversion 用戶端與同一個工作副本一起使用嗎?

是的,您可以隨時從一個用戶端變更為另一個用戶端。用戶端僅控制您的工作副本以及您的工作副本與儲存庫之間的互動。不同用戶端使用的工作副本內的元資料是相同的。

但是您只能在不同的用戶端都使用相同版本的 Subversion 程式庫時才能使用不同的用戶端。TortoiseSVN 使用的 Subversion 程式庫版本在安裝程式的檔案名稱中指出,其他用戶端也有類似的指示。您必須確保這些版本的前兩位數字彼此相符。例如,所有使用 Subversion 1.6.x 的用戶端都可以一起使用(「x」表示此數字與相容性無關)。

您也必須確定所有用戶端都是為相同的作業系統建置的。用戶端相容性僅針對特定的作業系統類型保證,並且元資料表示形式可能不同。您不得在同一個工作副本上使用原生 Windows 用戶端和 Cygwin 用戶端。如果您透過網路共用工作副本,您不得在同一個工作副本上使用 Linux 和 Windows 用戶端。

TortoiseSVN 可以在文字檔中即時轉換換行符號嗎?

查看關於 svn:eol-style 屬性的 subversion book 這裡。如果您將該屬性設定為例如「native」,則檔案在 Linux 上將具有 LF 行尾,但在 Windows 上將具有 CRLF 行尾。若要查看如何在 TortoiseSVN 中設定這些屬性,請閱讀我們的文件 這裡

當衝突發生在目錄的屬性列表時,我如何找出衝突是什麼?

在具有衝突屬性的資料夾內,您會找到一個名為 dir_conflicts.prej 的檔案。在文字編輯器中開啟該檔案,您將看到衝突的屬性。選擇您要保留的屬性,然後使用該屬性覆寫衝突的屬性。

我不小心移除了檔案。我該如何取回它?

如果您尚未提交變更,您可以在刪除檔案或目錄的父資料夾上執行 還原

如果您已提交已刪除的檔案,則可以使用儲存庫瀏覽器,變更為檔案仍然存在的修訂版本,然後從上下文選單中使用 複製到... 命令。輸入您的工作副本的路徑作為目標,已刪除的檔案將從儲存庫複製到您的工作副本。

您也可以使用此技術還原已刪除的目錄。

如果在使用此技巧還原檔案/資料夾後,日誌對話方塊未顯示該檔案的歷史記錄,請別擔心。歷史記錄仍然存在。如果您在 SVN 中複製檔案,您也會複製其歷史記錄。但是 TSVN 的 ShowLog 中的預設設定是「停止於複製」,這表示當您查看歷史記錄時,它只會回溯到分支點。這樣做的原因是,當您查看專案的真實分支時,您大多只想查看該分支的歷史記錄。若要在 ShowLog 中查看完整的歷史記錄,您需要取消選取「停止於複製」核取方塊,然後按一下「取得全部」。

當我右鍵點擊連結時,我得到多個 TortoiseSVN 上下文選單項目!

這是設計使然。一個項目用於連結本身(.lnk 檔案),另一個項目用於連結指向的目標。這樣,連結既可以進行版本控制,又可以同時像連結一樣運作,允許對其目標執行操作。實際上,您在檔案選單中最多可以有三個項目(上下文選單只會顯示兩個)。

是否可以使用像 Visual Source Safe 中的「共用檔案」?

是的,但有一些限制。您可以使用「檔案外部參考」從與您的工作副本相同的儲存庫的不同部分提取單個檔案,但不能從外部儲存庫提取。您也可以共用資料夾,這些資料夾可以來自任何儲存庫。請查看 《Subversion Book》中的 「外部定義」章節。

是否可以在沒有伺服器的情況下使用 TortoiseSVN?

是的,可以。您可以使用 file:// 通訊協定在本機存取您的儲存庫。但是,我們強烈建議您僅將其用於測試。如需更詳細的說明,請參閱 此 FAQ 項目

使用 TortoiseProc 時,是否可以傳送使用者名稱和密碼?

TortoiseSVN 是一個 GUI 用戶端,因此,如果需要,它會要求您輸入使用者名稱和密碼。如果您想要自動化對儲存庫的存取,而無需使用者互動(即,如果需要,無需輸入使用者名稱和密碼),請使用命令列用戶端。

修訂圖如何運作?

修訂圖有點特殊,它不像 TortoiseSVN 中的其他功能。它顯示檔案或資料夾在歷史記錄中的圖形,其中包含檔案或資料夾被複製、移動、分支或標記的所有修訂版本。

我們經常收到人們詢問為什麼需要取得儲存庫根目錄的日誌,或者為什麼需要取得從 HEAD 修訂版本到第一個修訂版本的完整日誌的問題。

只是為了澄清這一點:這不是因為我們是懶惰的程式設計師,而是真的有必要。

修訂圖透過尋找選定項目被複製的所有修訂版本來顯示選定檔案或資料夾的歷史記錄。而圖形必須使用可用的資訊來執行此操作。

如果您查看選定檔案或資料夾的日誌訊息,您可以在日誌對話方塊的下方面板中看到選定修訂版本的所有受影響路徑。該資訊是我們用於修訂圖的資訊。您還會注意到,如果您只顯示例如 /trunk 的日誌,您將不會在日誌對話方塊中看到標籤或分支中發生的修訂版本的任何項目。您甚至不會在該日誌中看到您標記或分支 /trunk 本身的項目。--> 這就是為什麼我們必須擷取儲存庫根目錄的日誌:只有儲存庫根目錄的日誌才會為我們提供我們需要的所有資訊,包括路徑何時以及在何處被複製/分支/標記/移動到。

如果我們只擷取特定範圍而不是所有修訂版本的日誌,我們可能會遺漏(仍然使用上面 /trunk 的範例)主幹被分支或標記的修訂版本。即使這些分支和標籤有變更或它們仍然存在於修訂版本範圍內,圖形也可能不知道這些分支/標籤是從 /trunk 而不是從其他路徑建立的。這表示,圖形不僅會不完整,而且會是錯誤的。

而且不:我們永遠不會改變這一點。因為沒有什麼比一個只有時正確的圖形更糟糕的了 - 您永遠不會知道它何時以及是否正確,這表示它會比無用更糟糕。

為什麼當我透過 svn+ssh 提交變更時,日誌中沒有顯示「作者」?

由於 SSH 完全處理了身分驗證程序,Subversion 甚至不會知道是誰執行了提交。因此,若要告訴 Subversion 作者是誰,您必須在 URL 中指定作者。例如:svn+ssh://[email protected]。您應該在取出工作副本時執行此操作。

為什麼 TortoiseSVN 無法識別檔案已被修改?

如果您修改了檔案,但 TortoiseSVN 沒有辨識到該檔案已被修改,請先檢查該檔案是否真的與您工作副本中的檔案不同。

如果您確定檔案已修改,但在提交對話方塊中仍然沒有顯示為已修改,請確認

  • 檔案的「上次修改」日期已變更(某些工具,例如十六進位編輯器,可能會重設該時間)
  • 如果已設定 svn:eol-style 屬性,且變更僅限於換行符號,則檔案不會顯示為已修改,因為對 Subversion 而言,檔案並未變更

Subversion 透過以下方法判斷檔案是否已變更

  1. 「上次修改」日期和/或檔案大小是否已變更?
  2. 否:檔案未修改
  3. 是:將檔案內容與 BASE 檔案比較
  4. 在第一個不同的位元組處停止,將檔案標記為已修改
  5. 如果與 BASE 相比沒有位元組不同,則將檔案標記為未修改

當我移除檔案時它消失了,我該如何提交它?

很簡單,您提交整個目錄!在檔案旁的 Explorer 視窗中按一下滑鼠右鍵,然後選擇提交。提交對話方塊會顯示每個修改以及新增或刪除的檔案。

在 SAMBA 共用上使用工作副本的權限問題。

升級到 TortoiseSVN 1.5.x 或更新版本後,如果您的工作副本儲存在 SAMBA 共用資料夾上,您會收到許多「存取遭拒」錯誤訊息,適用於大多數 Subversion 命令。

有些使用者回報說,將 SAMBA 升級到最新版本後,問題就消失了。如果這沒有幫助,或者您無法升級,請允許在 SAMBA 設定檔中刪除唯讀檔案

[global]
delete readonly = yes
對於舊版本,請嘗試
[global]
create mask = 0644
force create mode = 0600
security mask = 0555
force security mode = 0600

我們收到的資訊顯示,主要問題已在 SAMBA 3.2.3 中修正。還有一個關於將具有 svn:needs-lock 屬性的檔案設為唯讀的補充問題。據回報,這已在 SAMBA 3.2.6 或 3.3.0 中修正。

在檔案總管和檔案/開啟對話方塊中瀏覽速度非常慢。

如果您已對應未解析的網路磁碟機代號,可能是因為磁碟機無法存取,或者您尚未登入,則在 Windows 嘗試存取磁碟機但失敗時,檔案瀏覽可能會變得沒有回應。請取消對應磁碟機代號或確保可以存取它。

bugtraq: 屬性不適用於從儲存庫瀏覽器啟動的對話方塊。

這是設計使然。儲存庫瀏覽器不會讀取屬性,因為如果遠端執行,這會是非常慢的操作。只有從本機工作副本讀取時才夠快。

如果 TortoiseSVN 直接從儲存庫讀取這些屬性,則可能需要幾秒鐘(甚至幾分鐘!)才能擷取它們。

顯示日誌經常崩潰。

記錄快取依賴於所有儲存庫都具有不同的 UUID。關於原因以及您可以採取哪些措施的詳細說明在此:https://tortoisesvn.dev.org.tw/logcacheuuids.html

我們知道許多 Subversion 託管公司犯了一個錯誤,就是沒有為客戶建立新的儲存庫,而是簡單地複製範本儲存庫。如果您正在使用此類託管商,請告訴他們修正此問題。

當我更新工作副本時,未新增新檔案!

在 TortoiseSVN 1.6.0 和 1.6.1 之間,新增的資料夾是以「僅此項目」的深度新增的。這導致您的工作副本的該部分所謂的「稀疏檢出」。

請更新到最新版本的 TortoiseSVN,以避免將來發生此類問題。

若要修正您的稀疏工作副本,請不要使用「更新」,而是從 TortoiseSVN 子選單(在 Explorer 中按一下滑鼠右鍵)使用「更新至修訂版本...」命令,將「更新深度」下拉式方塊變更為「完全遞迴」。

有人告訴我,問題/錯誤 X 已在 rXXX 中修正,但最新的版本仍然沒有實作/修正此問題?

我們的發布政策是永遠不在穩定分支上引入新功能或資源變更。我們在主幹上工作,我們在其中修正錯誤、引入新功能或變更功能行為。只有重要的錯誤修正才會合併回穩定分支,而穩定分支是我們從中建立發布版本的來源。

我們制定此政策是為了防止將新錯誤引入穩定分支。畢竟,它被稱為穩定分支。

您請求的功能/回報的錯誤,即使它已在主幹上修正/實作,也由於此政策而未合併回穩定分支。這就是您在最新版本中看不到變更的原因。

如果您覺得冒險,可以使用每夜建置版本:https://nightlybuilds.tortoisesvn.net/latest/

TortoiseSVN 無法與 Eclipse 良好協同運作

Eclipse 會複製目錄作為其正常操作的一部分,而在 Subversion 工作副本中,它也會複製 .svn 目錄。這會導致 TortoiseSVN 認為 bin 目錄中有版本控制的檔案。

如果您想繼續使用 TortoiseSVN,並且只是防止這種情況發生,您需要將 '**/.svn/' 新增到 Eclipse 的來源排除清單中。

但是 Eclipse 有其自己的 Subversion 外掛程式,稱為 Subclipse,它使 Eclipse 能夠感知 SVN 並從源頭修正問題。您可以在 https://github.com/subclipse/subclipse 找到它。安裝 Subclipse 後,您需要進行全新的檢出。它不會修正安裝前進行的檢出。

在 Internet Explorer 中上傳檔案時出現安全性警告

當您在 Internet Explorer 中使用網頁表單選取要上傳的檔案時,您可能會收到安全性警告,指出程式嘗試開啟網頁內容,並將 TortoiseSVN 識別為罪魁禍首。

別驚慌!這是 Internet Explorer 安全性模型的(錯誤)功能。由於 TortoiseSVN 是 Shell 擴充功能,因此每當建立檔案開啟對話方塊時,它都會自動載入,以便提供圖示覆蓋層和上下文選單。
有兩種方法可以停止警告

  1. 在 TortoiseSVN 的設定中,前往「圖示覆蓋層」區段,並勾選方塊僅在 Explorer 中顯示覆蓋層和上下文選單
  2. 當警告出現時,勾選標記為永遠不再顯示此應用程式的警告的方塊。

重複出現插入智慧卡的對話方塊

如果您正在使用智慧卡軟體,則每次 TortoiseSVN 嘗試連線到儲存庫時,您都可能會收到要求您插入智慧卡的對話方塊。

不幸的是,即使它除了惹惱使用者之外沒有任何作用,但某些智慧卡供應商認為這不是錯誤,而是一項功能。

為了防止 TortoiseSVN 在儲存庫要求憑證時嘗試存取 Windows 憑證存放區,請建立登錄機碼 HKCU\Software\TortoiseSVN\OpenSSLCapi 作為 DWORD,並將其值設定為 0

「與工作副本比較」未使用設定的差異檢視器

當您從記錄對話方塊執行「與工作副本比較」時,即使您已設定要使用的不同差異檢視器工具,也會啟動 TortoiseMerge。

這不是錯誤:此命令不會比較兩個檔案,即使它可能看起來像那樣。它實際上會建立一個修補程式檔案,然後啟動 TortoiseMerge 以顯示將該修補程式檔案套用到工作副本會是什麼樣子。由於我們不知道有任何其他 UI 工具可以套用修補程式檔案,因此會啟動 TortoiseMerge。您設定的差異檢視器無法執行此操作。

偵錯符號在哪裡?

官方版本和每夜建置版本的所有偵錯符號都託管在 DrDump.com

若要存取偵錯符號,請將您的偵錯程式設定為使用符號伺服器,網址為 https://www.crash-server.com:8080/public/tsvn/71040F62-F78A-4953-B5B3-5C148349FED7/symsrv

若要了解如何使用偵錯符號伺服器,請查看這篇文章

我該如何...

... 將關鍵字資訊(如作者、修訂版本、日期和提交時間)新增到我的檔案中?

在 Subversion 書籍中閱讀關於 Subversion 屬性 svn:keywords 的內容。

使用 TortoiseSVN,依照此處所述設定屬性。

... 變更檔案名稱的大小寫?

Subversion 旨在與區分大小寫的檔案系統(例如 Linux 上使用的檔案系統)一起使用。當涉及到 Windows 不區分大小寫的檔案系統時,事情並不總是如您預期的那樣運作。一個例子是僅變更大小寫來重新命名檔案,例如將 Makefile 重新命名為 MAKEFILE。在 Subversion 1.7 之前,您無法在工作副本中輕鬆執行此操作,因為 Subversion 要求兩個名稱同時存在一小段時間,而 Windows 無法支援這一點。

目前最簡單的方法是直接使用儲存庫瀏覽器重新命名

  1. 提交工作副本中的變更。
  2. 使用儲存庫瀏覽器直接在儲存庫中將檔案從 UPPERcase 重新命名為 upperCASE。
  3. 更新您的工作副本。

從 Subversion 1.7 開始,這不再是問題,因為整個工作副本結構已變更,因此可以使用正常的 TSVN->重新命名命令簡單地重新命名檔案。

... 在提交後變更日誌訊息或作者?

叫出記錄對話方塊,並在您要編輯的修訂版本上按一下滑鼠右鍵。然後從上下文選單中選取「變更作者」或「變更記錄訊息」。為了使伺服器接受這些變更,必須為儲存庫安裝允許變更作者或訊息的 pre-revprop-change hook。預設安裝會拒絕變更作者和記錄訊息。

... 清除 TortoiseSVN 中的下拉式清單?

您可以從 TortoiseSVN 的設定對話方塊中清除所有儲存的資料。只需按一下對應的按鈕即可。

可以透過按下 Shift-Delete 從下拉式清單中永久移除單個項目。

... 從我的電腦中完全移除儲存庫?

呃哼:選取資料夾並按下 Delete(您鍵盤上的按鍵可能僅標示為 Del)。

認真地說,沒有隱藏檔案或設定。儲存庫完全包含在一個資料夾樹狀結構中。

工作副本也適用相同情況。如果您將工作副本傳送到資源回收筒,由於大量的小檔案,可能會嚴重減慢未來刪除的速度。您可能想要在之後盡快清空資源回收筒。

... 將日誌匯出到文字檔?

使用記錄對話方塊。選取所有您想要的項目,然後按下 Ctrl+C。然後在您最愛的文字編輯器中使用 Ctrl+V(或貼上)。

如果您想要自動處理記錄訊息,或者您需要它們採用 XML 格式,則可以使用命令列用戶端來執行此操作。

... 將專案修訂版本號碼放入我的專案中?

如果您想要程式版本號碼中的修訂版本號碼,則需要額外的工具來執行此操作。您可以在我們網站的下載頁面或 TortoiseSVN 資料夾的 bin 下找到工具 SubWCRev.exe

此工具會遍歷您的整個工作副本以尋找最新的修訂版本。找到該修訂版本後,它會取代以下字串的所有出現位置

$WCREV$
此字串將被您的工作副本的修訂版本號碼取代。
WCMODS?Modified:Not modified$
如果您有本機修改,則會插入問號和冒號之間的字串。如果您沒有本機修改,則會插入冒號和貨幣符號之間的字串。在我們上面的範例中,為 ModifiedNot modified
$WCDATE$
將被工作副本中最高修訂版本的日期取代。

例如,請查看 TortoiseSVN 原始碼樹狀結構中的檔案 version.in。此檔案用於 TortoiseSVN 及其資源檔案。SubWCRev.exe 工具是從建置腳本中呼叫的,如下所示:SubWCRev.exe path\\to\\working\\copy version.in version.h 這會建立一個新的檔案 version.h,其中上面的所有字串都已取代為工作副本的值。version.h 檔案然後在專案本身中使用,並包含在版本資訊的資源檔案中。

... 防止 Subversion 執行自動合併?

有些人不喜歡 Subversion 在更新時自動將來自其他人的變更與他們自己的本機工作副本變更合併的事實。以下是如何強制這些檔案進入衝突狀態,以便您可以隨時手動合併。

  1. 在 TortoiseSVN->設定->Subversion 設定檔中,按一下編輯按鈕。
  2. 透過新增以下兩行來變更 [helpers] 區段
    diff-cmd = "C:\\false.bat"
    diff3-cmd = "C:\\false.bat"
    (請注意雙反斜線)
  3. 建立檔案 C:\false.bat,其中包含兩行
    @type %9
    @exit 1

這有效地使自動合併每次都失敗,從而強制檔案進入衝突狀態。

奇怪的 'type %9' 行的原因是 diff3-cmd 將合併的輸出傳送到 stdout。然後 Subversion 取得此輸出並用合併結果覆寫您的本機檔案。新增此行可避免取得空的本機檔案。

... 查看我目前的工作區/儲存庫是什麼?

在工作副本中的資料夾上按一下滑鼠右鍵,從 Explorer 上下文選單中選擇「屬性」。然後,在屬性對話方塊中,切換到「Subversion」標籤。您可以在其中看到有關所選資料夾的各種資訊,包括它指向的 URL。

查看此資訊的另一種快速方法是從上下文選單中選取「重新定位」,並查看第一個 URL。由於您不想重新定位您的 WC,只需中止此對話方塊即可。

... 以靜默/自動方式安裝 TortoiseSVN?

只需像這樣啟動 MSI 安裝程式

msiexec /package TortoiseSVN.msi /quiet INSTALLDIR="path/to/install/dir"

錯誤訊息

無法複製/移動 'XXX.svn-base' 到 'XXX.tmp':系統找不到指定的檔案。

當您嘗試更新工作副本時,通常會發生此錯誤訊息。此錯誤的原因是

  • 儲存庫中實際上存在 2 個不同的檔案,它們的名稱僅大小寫不同。這無法在 Windows 檢出上運作,因為 Windows 檔案系統不區分大小寫。很可能是其中一個檔案被錯誤地新增了,因此您需要找出是哪個檔案,確保沒有將變更提交到錯誤的檔案,然後刪除它。
  • 有一個檔案具有非法(在 Windows 上非法)檔案名稱。例如,像 "con"、"lpr"、"com" 等名稱在 Windows 上是非法的,因為這些是裝置名稱。當然,名稱中包含 "/\*?:|" 和其他一些特殊字元也是 Windows (NTFS 和 FAT) 上不可能的。

是的,我們知道在這種情況下,錯誤訊息並不是真的很有幫助。但是錯誤訊息來自 Subversion 程式庫,我們無法自行變更它。

有幾種方法可以解決問題並防止它再次發生。請查看這些說明

無法將 '.svn/tmp/entries' 移動到 '.svn/entries':檔案或目錄已損壞且無法讀取。

當您嘗試更新或提交工作副本時,通常會發生此錯誤訊息,並且在 Windows 7 系統上似乎很常見。這是由於另一個程序持有 Subversion 需要移動或修改的檔案的控制代碼。這可能是病毒掃描程式。設定病毒掃描程式,以便從掃描中排除您的工作副本和儲存庫。

注意:Win7 中存在一個錯誤,導致此錯誤訊息出現的頻率遠高於必要的頻率。該錯誤已透過 Service Pack 1 修正。請參閱 此文章 以取得詳細資訊。

無法開啟檔案 'XXX\nnn-n.txn\changes':該檔案正由另一個程序使用,因此程序無法存取該檔案

回報此錯誤的人員經常表示,它會隨機發生,並且通常發生在大型提交的中途。重試提交可能會成功,或者可能會在不同的點失敗。

最可能的原因是病毒掃描程式在不應該的時候持有檔案控制代碼開啟。嘗試停用掃描程式,或使其忽略您的儲存庫。

類似的錯誤可能會在您的工作副本中發生。嘗試忽略那裡的 .svn 資料夾。

新增 'XXX' 失敗:已存在同名的物件

當您嘗試更新工作副本時,通常會發生此錯誤訊息。拋出此錯誤是因為 Subversion 永遠不會刪除或覆寫現有的本機資料。您收到此錯誤訊息可能有三個原因

  1. 您有一個本機未版本控制的檔案,其名稱與最近由其他人新增的檔案名稱相同。在這種情況下,解決方案是將您的本機檔案移動到其他位置(或重新命名),然後更新。之後,您可以決定是否需要以某種方式組合這兩個檔案,或者如果名稱的選擇純粹是巧合,您可以為您的檔案提供不同的名稱。
  2. 檔案已在儲存庫中重新命名,但它僅在大小寫上有所不同,例如 Install.txt 變更為 install.txt,並且您有本機變更。當您更新時,您最終會遇到情況 (1),其中修改後的本機檔案顯示為未版本控制。將其移動到其他位置,更新,然後整理混亂情況。
  3. 儲存庫中實際上存在 2 個不同的檔案,它們的名稱僅大小寫不同。這無法在 Windows 檢出上運作,因為 Windows 檔案系統不區分大小寫。很可能是其中一個檔案被錯誤地新增了,因此您需要找出是哪個檔案,確保沒有將變更提交到錯誤的檔案,然後刪除它。

'<path>' 的 OPTIONS:401 Authorization Required <url>

升級到版本 1.4.x 時,您突然無法再存取您的儲存庫。每次嘗試都會被拒絕,並顯示錯誤訊息:OPTIONS of 'path': 401 Authorization Required 'url'

原因是版本 1.4.x 中啟用了使用 SSPI 自動驗證。這表示 TortoiseSVN 現在嘗試使用登入 Windows 網域控制器的使用者的憑證自動驗證。

如果您已設定您的伺服器以針對網域控制器使用 SSPI 進行驗證,並且網域控制器沒有啟用使用者帳戶 GUEST,則應該沒問題。但是如果使用者帳戶 GUEST 處於活動狀態,則所有驗證都會使用該使用者成功 - 而您通常不會授予使用者 GUEST 存取您的儲存庫的權限。這就是為什麼驗證成功,但授權失敗的原因。

它可能失敗的另一個原因是,如果您為儲存庫存取設定了與您用於登入工作站不同的帳戶(儘管如此,我懷疑您為什麼首先要使用 SSPI 驗證)。

若要解決此問題,您有以下選項

  • 停用網域控制器上的 GUEST 帳戶
  • 為您的工作站和儲存庫存取使用相同的帳戶
  • 停用儲存庫的 SSPI 驗證
  • 檢查使用者名稱的大小寫。將存取檔案中的使用者名稱變更為小寫也可能解決此問題

此用戶端版本太舊,無法與工作副本 'XXX' 一起使用

完整的錯誤訊息是:此用戶端版本太舊,無法與工作副本 '.' 搭配使用;請取得較新的 Subversion 用戶端。

一旦您使用了連結到較高 Subversion 版本的 Subversion 用戶端,然後嘗試使用連結到較舊版本的 Subversion 用戶端執行命令,您就會收到此錯誤訊息,例如,您在工作副本上使用了 1.4.x 用戶端,現在您嘗試在同一個工作副本上使用 svn 1.3.x 用戶端。

原因是 Subversion 1.4 及更高版本會在每個命令上透明地升級工作副本。但是,一旦工作副本格式升級,較舊的用戶端就無法再存取工作副本,因為它們不知道新的格式。

「修正」此問題的唯一解決方案是升級您使用的任何用戶端,並讓您收到此錯誤訊息。或者使用較舊的用戶端進行全新的檢出。

工作副本已過時

當您嘗試提交您對工作副本所做的變更時,您會收到此錯誤訊息。通常會發生這種情況,因為其他人已在儲存庫中變更了與您相同的檔案。

這表示您需要使用更新命令將您的工作副本更新到與儲存庫相同的層級。

您可能不清楚為什麼需要執行此操作,尤其是當您知道儲存庫沒有變更時。答案很簡單,您的工作副本並未透過提交完全更新。只有變更的檔案和資料夾才會自動更新。請考慮以下新建立的儲存庫上的範例

Add Folder in revision 1
Add File1 and File2 in revision 2
Modify File1 and commit in revision 3

現在儲存庫位於修訂版本 3,但在您的工作副本中,修訂版本看起來像這樣

Folder       : revision 1
Folder/File1 : revision 3
Folder/File2 : revision 2

現在,如果您修改 File2 並嘗試提交,則會失敗。用戶端告訴儲存庫 File2 位於修訂版本 2,並具有本機修改,但儲存庫已位於修訂版本 3。如果您然後執行更新,File2 也將位於修訂版本 3(當然,您的本機變更仍然存在)。

如果您嘗試建立分支或標籤,也可能發生相同的情況。答案始終相同:如果您的工作副本已過時,請更新它!

無法寫入標準輸出

TortoisePlink 使用標準 plink 程式碼,但編譯為無視窗應用程式,因此沒有地方可以傳送錯誤訊息。在 TSVN 設定->網路中,將 SSH 用戶端方塊設定為使用標準 plink,其中錯誤訊息顯示在命令方塊中。一旦它開始運作,請使用具有相同參數的 TortoisePlink。

「無法寫入標準輸出」表示 Plink 想要擲回錯誤,但由於 TortoisePlink 沒有提供 DOS 方塊,因此沒有標準輸出可以寫入錯誤訊息。

因此,設定的某個地方出錯了。嘗試使用正常的 plink 程式,並查看那裡實際擲回了什麼錯誤訊息,然後修正設定。

如果正常的 plink 只是掛起,則傳遞給它的參數錯誤(設定對話方塊,網路標籤)。

另一種可能性是 SSH daemon 最有可能無法找到 svnserve 二進位檔。以您的目標使用者 (此處為 myuser) 登入伺服器,然後輸入 "which svnserve"。如果您沒有看到二進位檔的路徑,請使此檔案(以及最有可能的其他 subversion 二進位檔)對此使用者全域可存取。

400 Bad Request

REPORT request failed on '...' REPORT of '...': 400 Bad Request (http://...)

您位於封鎖 DAV 請求的防火牆之後。大多數防火牆都會這樣做。請要求您的管理員變更防火牆,或使用 https:// 而不是 http:// 存取儲存庫。這樣,您就可以使用 SSL 加密連線到儲存庫,防火牆無法干擾(如果它們沒有完全封鎖 SSL 連接埠)。

還有一些病毒掃描程式(即 Kaspersky)已知會干擾並導致此錯誤。

403 Forbidden

PROPFIND request failed: 403 Forbidden

這可能是因為您輸入了儲存庫的父路徑,而不是實際的儲存庫路徑。嘗試將您要存取的儲存庫的名稱附加到 URL。您還需要在 URL 的儲存庫名稱後附加一個尾隨 '/' 斜線。

有關實際錯誤的更多資訊,請尋找 Apache 錯誤記錄檔。

405 HTTP Method Not Allowed

PROPFIND Request Failed - Error 405 HTTP Method Not Allowed

此訊息有多種形式。當您

  • PROPFIND Request Failed 您嘗試使用舊版本的 TortoiseSVN 瀏覽儲存庫的父路徑,而不是儲存庫本身。嘗試附加您要存取的儲存庫的名稱,或將 TortoiseSVN 升級到 1.2.3 或更新版本。
  • PROPFIND Request Failed 您忘記在您輸入的 URL 結尾附加 '/' 斜線。舊版本的 TSVN 要求在儲存庫名稱後有一個 '/'。如果您忘記了這一點,TSVN 將從 URL 中剝離儲存庫名稱,因此嘗試存取父目錄。
  • PROPFIND Request Failed 您嘗試透過不允許 DAV 請求的 Proxy 存取儲存庫。通常,您可以使用網頁瀏覽器正常瀏覽您的儲存庫,只有在使用 svn 用戶端時才會收到此錯誤。您必須設定您的 Proxy/防火牆伺服器以允許 DAV 請求通過。或者嘗試使用 https 而不是 http:大多數 Proxy 無法分析加密的網路封包,因此無法再封鎖 DAV 請求。
    此錯誤的另一種可能性是您機器上執行的病毒掃描程式/防火牆。其中許多會在您甚至沒有注意到的情況下過濾掉 DAV 請求。嘗試停用掃描程式/防火牆。
  • Lock Request Failed 您嘗試鎖定工作副本中不再存在於儲存庫中的檔案。在嘗試鎖定檔案之前,請更新您的工作副本。

有關實際導致錯誤原因的更多資訊,請尋找 Apache 錯誤記錄檔。

SVN+SSH: Connection closed unexpectedly

據回報,先前運作正常的 svn+ssh 連線形式 svn+ssh://[email protected] 在 TortoiseSVN 1.5 中停止運作。這似乎與 plink 有關,並且如果您在 PuTTY 中設定了預設主機名稱,則會發生這種情況。

如果是這種情況,您可以透過使用 regedit 或 regedt32 清除 HKEY_CURRENT_USER/Software/SimonTatham/Putty/Sessions/Default%20Settings/HostName 來修正它。

另一位使用者回報了以下伺服器端修正
  • ssh 進入您的帳戶
  • cd ~
  • cp /etc/bashrc .bashrc
  • nano .bashrc
  • 在 "mesg y" 行之前放置一個 #(將其註解掉)
  • Ctrl+X 退出,在提示儲存時按下 Y