2009-06-01 149 views
2

我有一個現有的SVN存儲庫,其中包含一個文件夾,其中包含我的項目。 我想知道是否有方法創建一個新的存儲庫,並將我的項目文件夾設置爲其根目錄,並保留所有的subversion歷史記錄(日誌)。請注意,我不介意丟失原始存儲庫修訂版本號。SVN文件夾到新的存儲庫根目錄

謝謝。

+0

正在創建一個新的回購鑰匙在這裏或只是擺脫一個級別的子目錄?如果後者,「svn move」是你的朋友。 – laalto 2009-06-01 08:47:33

+1

此問題已被詢問並回答了幾次 - 搜索「svndumpfilter」。 – 2009-06-01 08:51:49

回答

2

您可以手動複製存儲庫,也可以使用svnadmin。

然後,您可以將項目的子目錄移到根目錄下,並刪除其他所有內容,從而保留所需的目錄結構。歷史將被保存,每個文件,但它會記住,文件曾經有一個不同的路徑(這可能是一件好事)。

2

Avi的解決方案可能是最簡單的,但有一個缺點是新的存儲庫將包含此項目之外的所有內容的完整歷史記錄。在下面的例子中,我假設你在* NIX機器的命令行,並且你在一個包含現有存儲庫的目錄中。

svnadmin create new-project-repo # create new repo next to old repo 
svnadmin dump old-project-repo | svnadmin load new-project-repo 
svn mv file://$PWD/new-project-repo/my-project/trunk file://$PWD/new-project-repo/trunk 
svn mv file://$PWD/new-project-repo/my-project/branches file://$PWD/new-project-repo/branches 
svn mv file://$PWD/new-project-repo/my-project/tags  file://$PWD/new-project-repo/tags 
# ... svn rm file://$PWD/new-project-repo/XXX for all the cruft still at the top level. 

如果您正在運行subversion 1.6.x,svnsync提供了一個更好的選擇。在1.6.x之前,svnsync只能用於複製整個存儲庫。在1.6.x版本中,它只能複製存儲庫的給定子樹。

svnadmin create new-project-repo 
# svnsync needs the ability to set revision properties, so we must install a pre-revprop-change 
# hook script which just exits with status 0 (no error). On *NIX systems, the program `true` will do this. 
ln -s /usr/bin/true new-project-repo/hooks/pre-revprop-change # possibly /bin/true 
svnsync init file://$PWD/new-project-repo file://$PWD/old-project-repo/my-project 
svnsync sync file://$PWD/new-project-repo 
# go drink some coffee 
1

僅供參考:svnsync選項爲我工作的顛覆1.5.3。

而且,這裏是一個Windows批處理腳本做同樣的事情:

SET OLD_REPO_URL =
SET NEW_REPO_URL = d:/資料庫/新項目回購
SET NEW_REPO_FILE_PATH = d:\庫\新項目回購

svnadmin的創建%NEW_REPO_FILE_PATH%
回聲退出0>%NEW_REPO_FILE_PATH%\吊鉤\版本屬性前,change.bat

svnsync的init文件:///%NEW_REPO_URL%%OLD_REPO_URL%
svnsync的文件:///%NEW_REPO_URL%

注意:您將無法直到同步完成瀏覽新的存儲庫。

相關問題