![](/img/trans.png)
[英]How do I migrate an SVN repository with history to a new Git repository?
[英]How do I migrate an SVN repository to another SVN repository?
有沒有一種簡單的方法可以將目錄從一個存儲庫復制到另一個存儲庫並復制所有歷史記錄?
最簡單的方法是使用:
svnadmin dump path/to/repos > repos.out
這將在文件repos.out
為您的存儲庫(帶歷史記錄)創建可移植格式。 然后你可以使用
svnadmin load path/to/newrepos < repos.out
將“轉儲”存儲庫加載到新的或現有的存儲庫。
第5章存儲庫維護 - >遷移存儲庫數據在其他地方有關於使用版本1.7的svnadmin dump
注意事項:
Subversion存儲庫轉儲格式僅描述版本化存儲庫更改。 它不會攜帶有關未提交的事務,文件系統路徑上的用戶鎖,存儲庫或服務器配置自定義(包括鈎子腳本)等的任何信息。
正如Subversion書中所建議的那樣:
svnadmin dump path/to/repos_src \
| svndumpfilter include path/inside/svn/to/directory \
| svnadmin load path/to/repos_dst
舉個例子:
svnadmin dump /var/lib/svn/old_repo \
| svndumpfilter include trunk/my_project/common_dir \
| svnadmin load /var/lib/svn/new_repo
如果您不想要歷史記錄,可以使用svn export
獲取沒有.svn
文件夾的干凈文件夾,然后將svn import
到您的其他存儲庫中。
有了歷史記錄,您需要使用svnadmin dump
。 然后,在使用svnadmin load
之前,您將使用svndumpfilter
僅過濾要使用的部分或路徑。
主題閱讀:
使用svnsync
- Subversion存儲庫鏡像命令:
svnsync
是Subversion遠程存儲庫鏡像工具。 簡而言之,它允許您將一個存儲庫的修訂重放到另一個存儲庫中。
svnsync
命令的Subversion文檔具有以下警告(從版本1.7開始),這意味着一旦使用其他一些SVN命令修改鏡像存儲庫, svnsync
不應再次與該特定鏡像一起使用:
svnsync
對鏡像存儲庫中所做的更改非常敏感,這些更改不是作為鏡像操作的一部分進行的。 為了防止這種情況發生,最好是svnsync
進程是唯一允許修改鏡像存儲庫的進程。
在Subversion版本1.7中,有一個新命令svnrdump
,它可用於訪問遠程存儲庫並生成與svnadmin dump
命令生成的轉儲格式相同的轉儲格式。 這允許您使用帶有svnadmin load
svnrdump
來傳輸Subversion存儲庫。
請參閱svnrdump-Remote Subversion存儲庫數據遷移 ,其中包含新命令的說明。
在紅皮書的第5章中, 遷移存儲庫數據Elsewhere部分有一個子部分使用svnrdump
存儲庫數據遷移 ,該部分提到:
[
svnrdump
和svnadmin dump
]之間的主要區別在於,svnrdump
不需要直接訪問存儲庫,svnrdump
使用與Subversion客戶端完全相同的存儲庫訪問(RA)協議進行遠程操作。 因此,您可能需要提供身份驗證憑據。 此外,您的遠程交互[原文如此]受Subversion服務器上配置的任何授權限制。
我還假設svnadmin dump
有關服務器配置自定義(如掛鈎)的限制可能無法轉移也適用於svnrdump
。
您可以使用svnadmin dump
創建轉儲文件,然后使用svnadmin load
導入到新的存儲庫。
我認為應該說利用創建的轉儲文件
svnadmin dump path/to/repos > dumpfile
可以使用該命令創建(從svn 1.7開始)
svnrdump dump url_to_repos > dumpfile
當從遠程計算機而不是服務器完成時,這很有用。
如果這有助於其他人,則有svn2svn可以將變更集從一個Subversion存儲庫重放到另一個:
要將存儲庫從一個服務器遷移到另一個服務器,請遵循以下步驟。
步驟1:將所有存儲庫版本轉儲到轉儲文件中。 您可能在現有存儲庫中擁有數千個版本。 因此,您可以使用以下腳本創建轉儲文件。
# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
# your-unix-command-here
echo $i
svnadmin dump <old_server_repository_location > -r $i –incremental > <dump_location>/$i.dump
done
在上面的腳本中,您可能會根據空間可用性獲得舊存儲庫的完整轉儲,或者您可以在短時間間隔(即0-5000,然后從5001-10000等)獲取轉儲。
步驟2:使用以下命令執行上述腳本。 根據內核版本,您需要執行以下兩個查詢之一。
$ bash dump.sh > stdout.sh
$ ./sh dump.sh > stdout.sh
這將使用上述命令將您必須執行的所有命令寫入stdout.sh文件。 您可以跟蹤此文件以供將來參考。
步驟3:檢查舊服務器和新服務器之間的端口號22的防火牆是否打開。 如果未打開,請要求管理員提供此功能。
步驟4:現在使用以下命令將從舊SVN存儲庫生成的所有轉儲文件復制到新服務器。
$ sftp xxxx@<new_server>
Connecting to <new_server>…
Password:
sftp> mput *.dump <new_server>/dump_location
在上面的命令中, xxxx
是正在執行操作的用戶。 在執行sftp的過程中,您將轉儲文件從舊服務器復制到新服務器。
步驟5:為新服務器創建新存儲庫
$ svnadmin create <new_repository>
步驟6:現在使用以下腳本加載所有轉儲文件。
# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
# your-unix-command-here
echo $i
svnadmin load –bypass-prop-validation <new_repository> < dump_location /$i.dump
done
只需按照上述六個簡單步驟,您就可以將現有存儲庫遷移到新存儲庫。 通過此過程,您無需擔心現有存儲庫的損壞修訂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.