2011-06-20 25 views
2

當你有一個svn switch <source> <target>,我知道它將工作目錄切換到目標路徑。svn switch,--relocate做什麼?

我想了解--relocate用於什麼。我以爲只有當版本庫的url已經改變,並且想更新工作副本url來指向新的svn服務器位置時纔會使用它。但它似乎Relocate can only change the repository part of an URL

所以我的問題是,--relocate開關做什麼?特別是,可以將其用於集成到用戶的分支供應商的分支,具有自前一版本許多差異,即

svn co path\to\vendor\lib

svn --relocate lib url\path\to\my\branch

svn commit -m "Updated my branch with vendor code without using cp, this way _I think_ enables deleting folders and files that don't exist in new version of vendor lib.

上午我得到任何的這個權利?

回答

4

SVN重定位是指當那些討厭的管理員將路徑移動到存儲庫時。

例如原:

http://mydomain.com/svn/repo/Project/MyApplication/trunk

管理員感到厭煩,並更改爲:

http://mydomain.com/svn/MyApplication/trunk

你需要做的svn移居告訴svn的是,路徑到您的項目已經改變。


至於你提供例如它不能被用來重返分行,該命令是讓svn客戶端更新其所有的路徑,你的資料庫的新位置。你需要svn合併它們。

+0

是的,但在我的例子中,使用場景是否有效? – stefgosselin

+0

我最後的編輯是否回答你的問題? – Nix

+0

抱歉這麼晚纔回復,我一直在忙! - 這個DID回答我的問題。可悲的是,svn不再在我的工具箱中。 :) – stefgosselin

3

我認爲這只是當版本庫的URL已經改變,並且一個想要更新工作 複製URL指向新的svn服務器位置時才使用。

這正是它所做的。如果你的Subversion服務器已經改變了它的位置,使用「switch --relocate」,它只會聯繫服務器,如果它仍然存在,就重新將工作副本中的URL改寫爲新的URL。您的工作副本不會與服務器有任何差異更新(直到您再次運行svn更新)

svn switch,沒有--relocate將工作副本切換到新位置(通常是分支)並進行任何更改工作副本需要將其轉換爲該分支它與檢出該分支幾乎相同,但通常更快,更方便。

更多信息here/here

特別是,可以將其用於集成到用戶的分支供應商的分支,有許多差異 因爲以前的版本,即

不,那是什麼svn合併是爲了。

雖然SVN開關可以讓你在你的工作拷貝測試出該供應商支路的第一。您可以像以前一樣保留主項目,但是將供應商的子目錄切換到新的供應商分支。

注意,顛覆沒有(還)支持任何合併/顛覆不同服務器之間brancing,讓您的供應商分公司都將被導入到您的「用戶分支」是第一個服務器。然後,您可以將新的供應商分支與您的用戶分支合併。

您也可以使用svn:external,通常將供應商代碼保存在項目路徑之外,並使用svn:external將它們「導入」工作副本。例如你有 /myproject/trunk/爲您的項目和/3party/libraryFoo/version1/

myproject工作,你想擁有它/myproject/trunk/libraryFoo下,所以你只需要添加一個svn:外部上/myproject/trunk/到例如libraryFoo http://myserverver//3party/libraryFoo/version1/。當您想要更新到新版本時,只需將svn:external更改爲例如libraryFoo http://myserverver//3party/libraryFoo/version2。這樣你就可以從另一個顛覆服務器獲取內容了,例如直接發送到3.party服務器 - 儘管如果您打算進行本地更改,這並不是非常有用。