[英]Migrate a svn repository to a git repository in scm-manager
我已經在Windows Server 2012 R2上安裝了scm-manager 1.45作為服務。
我有一個Subversion版本庫轉儲文件。 我設法將其導入到scm-manager中的subversion倉庫中。 但是我真的想將其遷移到git存儲庫,但是我似乎不知道該怎么做。 我希望所有的提交歷史都可以遵循。
在您用來保留共享存儲庫的工具之外,svn-git和一些命令行魔術將解決您的問題
我假設遷移是從類似Unix的系統完成的,例如Linux,mac或什至在Windows機器上運行的cygwin 。 如果沒有適當的cygwin安裝,可以嘗試使用在Windows平台上與msysgit一起安裝的'Git Bash'
將提交者列表提取到SVN儲存庫,為此,運行(從SVN儲存庫的根目錄):
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt
它將創建一個具有以下作者列表的文件:
jsmith = jsmith <jsmith>
您需要將其修改為以下內容:
jsmith = John Smith <john.smith@evil_corporation.com>
此步驟很重要,因為git將在下一步中使用該步驟將SVN提交者ID轉換為git提交者ID(請注意,如果願意,可以手動創建此文件)
為此,執行:
git svn clone <SVN_repo_URL> -A authors-transform.txt --stdlayout ~/svn-git-migration
哪里:
<SVN_repo_URL>
是您的SVN存儲庫, authors-transform.txt
是您剛創建的文件。 請注意,如果您在SVN儲存庫布局中使用了“標准” SVN分支命名法,則可以正常工作;如果不是這種情況,則需要在git-svn中指定“文件夾”的名稱通過將--stdlayout
參數替換為--stdlayout
來創建分支:
-T
(用於干線路徑)
-b
(用於分支路徑)
-t
(用於標簽路徑)參數
(您可以在此處找到有關git-svn clone命令的詳細說明)
此步驟可能需要一些時間(它一步一步地詳細說明了SVN增量中的git歷史記錄),但是完成后,SVN存儲庫的git版本將位於您的主目錄中svn-git-migration
文件夾中(如果需要,在命令中指定其他路徑)
注意:這些命令需要在新的git倉庫中執行,因此您需要在上一步中移至已克隆存儲庫的文件夾中
Subversion處理標簽的方式與git不同。 Git tahs僅涉及一次提交(一個git標簽僅包含一個提交ID),但是SVN標簽是分支的特殊王者,因此在這里,我們需要找到存儲庫標簽分支(查看refs / heads / tags)並在所有標簽的頂端貼上標簽:
git for-each-ref --format='%(refname)' refs/heads/tags |
cut -d / -f 4 |
while read ref
do
git tag "$ref" "refs/heads/tags/$ref";
git branch -D "tags/$ref";
done
此外,我們需要將主分支重命名(SVN中的主干重命名為git主分支'master'
git branch -m trunk master
現在,只需將新的/遷移的git存儲庫推送到git服務器(scmmanager?),就可以完成:-)。 請記住,您需要將git服務器存儲庫添加為遠程服務器, 在這里您可能會找到一些幫助。
請確保您具有SCM管理器存儲庫所在的讀/寫權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.