2010-10-28 89 views
31

我已經將項目從CVS遷移到SVN。現在我需要重命名該項目。什麼可以是最好的方式來重新命名它,保持所有的歷史完整。該項目文件夾包含大約100個C及其頭文件。重命名SVN存儲庫項目名稱

+0

如果您正在使用[VisualSVN服務器(https://www.visualsvn.com/server/),你可以簡單地在VisualSVN服務器管理器MMC右鍵單擊庫,並選擇「重命名」 – 2016-08-01 12:47:11

回答

19

在Subversion中沒有內置機制來重命名存儲庫。

爲了保持完整性和歷史記錄,最佳選擇是執行舊存儲庫的存儲庫轉儲,然後將轉儲重新導入到新存儲庫中。

我在這裏寫了一篇文章:How To Rename an SVN repository

您只需要使用svnadmin的實用程序,然後svnadmin的創建一個新的存儲庫,svnadmin的轉儲以前的資料庫的內容,最後svnadmin的進口轉儲到新的倉庫,你已創建使用svnadmin創建

編輯

如果您需要重命名「項目」在倉庫裏 - 和項目中,我假定你的意思是一個目錄 - 那麼你只需要使用svn move command。請注意,這是使用svn客戶端完成的,而不是svnadmin。 svn move命令的語法是svn move SRC DEST,它允許你基本上預先形成一個文件或存儲庫內的目錄的重命名。該文件(或目錄)應保留所有歷史記錄。

+0

實際上我有存儲庫。這可以忍受幾個項目。在那些項目中,我需要重命名一個項目不是整個存儲庫。有沒有辦法呢? – thetna 2010-10-29 00:08:58

+44

@Minky:你的博客是4月1日的笑話嗎? 要重命名存儲庫,只需重命名您的回購所依賴的目錄:例如 如果您的回購在/ opt/svn/my_old_name中,則只需應用: mv/opt/svn/my_old_name/opt/svn/new_name 無需轉儲/重裝! – 2010-10-30 02:48:35

+2

@Penter,感謝您對我們的啓發.. – 2010-10-30 16:52:57

42

爲了重命名存儲庫,您只需重命名其根目錄並生成新的UUID。假設倉庫是在/var/svnroot/my_repo,你必須運行此命令(如根)重命名庫:

$ mv /var/svnroot/my_repo /var/svnroot/my_new_repo 
$ svnadmin setuuid /var/svnroot/my_new_repo 

之後,你可以通過你喜歡的協議訪問它。

+5

只要移動(不復制)原始存儲庫,就不需要生成新的UUID。 – 2013-12-17 19:35:46

+2

有沒有這方面的證據?我不想冒這樣的風險,並損害我的回購。 – guerda 2014-03-13 13:33:44

+2

@guerda我正在與這個移動的回購一年沒有任何問題,但現在我不在同一家公司工作。你知道,在對你的數據進行任何重要改變之前做一個備份;) – 2014-03-18 08:36:01

18

SVN Book \ 5.信息庫管理\ Moving and Removing Repositories

Subversion版本庫的資料全部儲存庫 目錄中包含。因此,你可以移動的Subversion倉庫的一些其他 位置在磁盤上,重命名庫,複製庫或刪除 庫完全使用您的作業 系統提供的工具,用於操縱目錄

重命名通常是在同一臺服務器上完成的,因此對存儲庫目錄進行簡單的重命名/移動就可以完成。 svnadmin setuuid的調用是而不是必需的,因爲您沒有創建副本並且UUID應該保持不變,所以您的客戶端可以輕鬆地重新定位到新的存儲庫URL。

2

SVN 1.1 (old book)

有時候管理員會改變你的資料庫,換句話說,該資源庫的內容不會改變「外景基地」,但使用的主要URL到達庫的根確實。例如,主機名可能會更改,URL方案或導向存儲庫本身的URL的任何部分。您可以讓svn switch命令「重寫」工作副本中所有URL的起始位置,而不是檢出新的工作副本。使用--relocate選項進行替換。沒有文件內容被更改,庫也沒有聯繫。這與在運行s/OldRoot/NewRoot /的工作副本.svn /目錄上運行Perl腳本類似。

$ svn checkout file:///tmp/repos test 
A test/a 
A test/b 
… 

$ mv repos newlocation 
$ cd test/ 

$ svn update 
svn: Unable to open an ra_local session to URL 
svn: Unable to open repository 'file:///tmp/repos' 

$ svn switch --relocate file:///tmp/repos file:///tmp/newlocation . 
$ svn update 
At revision 3. 

SVN 1.7 (current book)

SVN移居 - 重新定位工作副本指向不同的存儲庫根URL。

梗概

svn relocate FROM-PREFIX TO-PREFIX [PATH...]

svn relocate TO-URL [PATH]

說明

有時管理員可能改變一個存儲庫的位置(或表觀位置,從客戶端的角度來看)。存儲庫的內容不會更改,但存儲庫的根URL將會更改。主機名可能會更改,因爲存儲庫現在由另一臺計算機提供。或者,URL方案可能會更改,因爲存儲庫現在通過SSL(使用https://)而不是普通HTTP進行提供。這些類型的存儲庫重定位有許多不同的原因。但理想情況下,存儲庫的「更改地址」不應突然導致指向該存儲庫的所有工作副本永遠無法使用。幸運的是,事實並非如此。 Subversion提供了svn relocate命令,用於「重寫」工作副本的管理元數據以引用新的存儲庫位置,而不是強制用戶在重新定位存儲庫時檢出新的工作副本。

第一SVN移居語法允許您通過什麼本質上相當於以更新的一個或多個工作副本查找和替換記錄在這些工作拷貝版本庫的根URL中。 Subversion會將這些初始子字符串FROM-PREFIX替換爲這些URL中的字符串TO-PREFIX。這些最初的URL子字符串可以像區分它們所需的那樣長或短。顯然,要使用此語法表單,您需要知道工作副本所指向的存儲庫的當前根URL以及該存儲庫的新URL。 (您可以使用svn info來確定前者。)

第二種語法並不要求您知道當前的存儲庫根URL,工作副本只與新的存儲庫URL(TO-URL)關聯,它應該指向它。在此語法形式中,一次只能重新定位一個工作副本。

例子

讓我們開始反映本地資源庫URL的工作副本:

$ svn info | grep URL: 
URL: file:///var/svn/repos/trunk 
$ 

一天,管理員決定重新命名磁盤上的存儲庫目錄。我們錯過了備忘錄,因此下次嘗試更新工作副本時會看到錯誤。

$ svn up 
Updating '.': 
svn: E180001: Unable to connect to a repository at URL 'file:///var/svn/repos/trunk' 

經過自動售貨機的管理員,我們瞭解了正在移動的存儲庫並被告知新的URL。儘管我們只是要求Subversion重寫工作副本元數據以指向新的存儲庫位置,而不是簽出新的工作副本。

$ svn relocate file:///var/svn/new-repos/trunk 
$ 

顛覆並沒有告訴我們很多關於它的所作所爲,但嘿,無差錯操作,實在是我們所需要的,對不對?我們的工作副本適用於在線操作。

$ svn up 
Updating '.': 
A lib/new.c 
M src/code.h 
M src/headers.h 
… 

默認情況下,SVN搬遷會遍歷嵌套的工作副本內的任何外部工作拷貝,並嘗試這些工作拷貝搬遷了。使用--ignore-externals選項可禁用此行爲。

+0

好的細節,解釋和歷史。非常有用的信息。即使它沒有直接解決OP問題。 – 2015-09-25 15:29:03

0
  1. 首先得知道在哪裏居住在\Repositories文件夾,(defaut C:\Repositories

  2. 之後重命名你的資料庫,你想,那/Repositories文件夾內。 (windows)

  3. 如果您使用的是eclipse,然後丟棄SVN存儲庫中舊的存儲庫位置並轉到New->Repository Location...-> your new repository name。而已。