2009-10-02 128 views
3

如果我理解正確的subversion版本定義:SVN客戶端/服務器版本

  • 對服務器的結構庫
  • 的工作副本在客戶端的結構
  • 客戶端和服務器之間的API

一旦我們安裝了svn服務器,我們不會觸及/升級它。

事情在客戶端更復雜。

在客戶端(Windows),我們當前使用tortoisesvn。它的版本(糾正我,如果我錯了)是對應於顛覆版本。

現在,我們將把我們的應用程序移植到Linux上,因此我們考慮使用額外的svn客戶端(svn命令行實用程序,Eclipse插件和一些GUI前端)。

現在的問題:

  1. 是否有可能幾個不同的客戶端將在同一結賬代碼工作? 如果是,那麼這意味着我需要認真挑選要使用的客戶端版本,因爲每個客戶端都希望在.svn目錄中找到特定的格式/數據?

  2. 服務器版本與客戶端之間的關係是什麼? 例如,如果服務器端是1.4,客戶端是1.6,那麼這意味着某些1.6 功能將不起作用?

  3. 是不是真的Subversion客戶端的版本是不必要對應的子版本,如rapidsvn而不是tortoisesvn

回答

4
  1. 工作拷貝格式特別適合於客戶端主要版本(即,不要嘗試使用1.4客戶端上由1.6客戶端創建一個WC)。

  2. 從理論上講,舊客戶端/新服務器或反之亦然都可以,但大多數測試都是在相同版本(1.6.x - 1.6.x)的情況下完成的。通常,你可以混合使用客戶機/服務器版本,只有舊版本的功能不適用於舊版本(即1.4版本的客戶機不支持mergeinfo,1.5版本的客戶機版本會失敗)信息)。同樣,最好堅持使用相同的主要版本,但如果有必要,您可以避開差異。

  3. 通常,您可以在發行說明中找到特定客戶端所針對的svn庫版本。

1
  1. 大多數客戶會尊重他們的.svn目錄找到格式。這意味着他們不會改變它。如果他們不支持格式,你會得到一個錯誤,但他們不應該損壞數據。如果您使用多個不同的客戶端來更新/使用結帳,他們應該創建鎖定(因此第二個客戶端會說別人目前正在結帳並停止)。但爲了安全起見,你不應該試試這個。

  2. 是的,1.4客戶端可以與1.6服務器通話,但新功能將不可用。

  3. 通常,客戶端會說某個地方支持哪些服務器版本,但客戶端是不同的項目並且有自己的版本編號方案。

2

你非常接近標記。使用相同主版本的新客戶端總能讀取工作副本和存儲庫,因此1.6客戶端將始終能夠處理較舊的服務器或工作副本。

但是,您仍然需要了解每個版本支持的版本。大多數會自動升級工作副本到自己的版本;所以如果你使用一個較老的1.4客戶端進行簽出,並用一個新的客戶端進行更新(例如最新的svn 1.6);前者的工作副本將不再可用。

+2

值得注意的是,工作副本升級會立即進行,並且默默無聲。只要1.6客戶端查看1.4工作副本,它就不會告訴你就升級它,並鎖定所有1.4客戶端。 –

4

我會強烈不建議您嘗試使用不同的Subversion客戶端對同一個結帳目錄,特別是如果這些客戶端運行在不同的平臺上(即通過網絡)。 Subversion使用文本文件的行結尾來執行特定於平臺的事情,如果您在Windows上籤出,然後檢查與Linux相同的工作副本(例如),則可能會意外觸摸每個文件的每一行,方法是添加虛假的CRLF行結束。

如果您正在進行跨平臺開發,請在每個開發平臺上設置不同的結帳目錄。如果您必須在登記之前共享更改,請考慮使用Git和git-svn網關。

+0

你是指在特定於平臺的結帳目錄之間共享更改? 關於git。與svn相比,我發現它相當複雜。 git-svn需要對git有深入的瞭解嗎? 是否有可能使用git-svn作爲主svn客戶端或僅作爲輔助服務器來創建私有分支/提交? – dimba

+0

我分享的意思是:如果您使用某個特定平臺的Subversion客戶端將代碼簽出到特定目錄中,請確保使用相同的客戶端平臺在相同的工作目錄中檢查*。不要將平臺與相同的工作目錄結帳混合。 –

+0

關於Git,可以使用git-svn作爲主要的Subversion客戶端。當我需要使用Subversion版本庫時,我使用Git完成了大部分日常工作。我可以創建私有分支,存儲更改,合併/重新分配私有分支,以及所有這些好東西,而不必告訴Subversion。當我準備好提交時,我構建了一個線性歷史記錄(通常不難),並且'svn dmitmit'將它提交給Subversion。但是,爲了操作Subversion版本庫中的分支,我通常會使用Subversion客戶端來代替git-svn。 –

相關問題