2013-04-14 98 views
19

我搜索了相關的問題,但找不到符合我的具體情況的任何內容:我有一些來自SVN服務器的舊版存儲庫歸檔文件,這些歸檔文件在多年前就被取消了。它們是服務器上原始存儲庫結構的tarball。我想要做的就是將它們轉換爲git倉庫,作爲未來工作/恢復項目的基礎。我已經閱讀了幾個有關轉換過程的教程,我想我可以找出作者轉換,分支映射等,但他們都假設你有一個SVN服務器和一個存儲庫的URL。我是否需要安裝和設置SVN服務器才能執行此轉換,或者有什麼方法可以指向git clonesvn2git(或其他工具)處於我擁有的回購轉儲?轉換本地svn回購轉儲爲git

+1

VisualSVN服務器的標準版免費,所以有計劃B. – Dialecticus

+0

我認爲安裝原始的SVN服務器會比這更容易.. –

回答

21

,以導入您的達姆本地安裝的顛覆p,然後用git-svn包。

您可以使用git svn clone file:///path/to/svn/repo /path/to/empty/dir

+1

我已經發現這個實驗昨晚,並得到它的工作,B這是正確的答案。感謝和+ 1 /接受!歡迎來到SO。 :-) –

+0

非常感謝你! – Asenar

2
  1. 所有SVN(?) - > git的轉換器需要現場Subversion版本庫,
  2. 庫的樹副本不是轉儲,這是通常的文件級備份。

您有:

  1. 安裝和配置任何Subversion服務器(如果您的轉換器無法處理file:///協議SVN,否則不需要的話 - 只要解壓縮包(S),並與SVN檢查回購客戶端)
  2. 閱讀混帳svn的
  3. 使用git - svn的
4

檢索所有的Subversion提交者列表:使用

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt

克隆版本庫的git - svn的

git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp

轉換的svn:忽略屬性的.gitignore

cd ~/temp 
git svn show-ignore > .gitignore 
git add .gitignore 
git commit -m 'Convert svn:ignore properties to .gitignore.' 

推資源庫裸git倉庫

git init --bare ~/new-bare.git 
cd ~/new-bare.git 
git symbolic-ref HEAD refs/heads/trunk 

然後推臨時存儲庫,以新的純倉庫。

cd ~/temp 
git remote add bare ~/new-bare.git 
git config remote.bare.push 'refs/remotes/*:refs/heads/*' 
git push bare 

重命名「主幹」分支「大師」

cd ~/new-bare.git 
git branch -m trunk master 

清理分支和標籤

cd ~/new-bare.git 
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 

參考:http://john.albin.net/git/convert-subversion-to-git

0
  1. 以轉儲文件在您的西弗斯:

    svnadmin dump "repopath or url" > import.bkp 
    
    git svn clone "back" 
    
  2. 轉到克隆路徑,然後打開混帳bash和 運行這些命令:

    git svn show-ignore > .gitignore 
    
    git add .gitignore 
    
    git commit -m "with message" 
    
    git check in "git url"