2012-02-09 26 views
0

我試圖將svn存儲庫移動到git存儲庫。我不想再使用svn,所以我使用no-metadata選項。我很好奇,爲什麼,在做git svn fetch之後,我的分支只有遠程引用。如何使用svn-git(標準佈局)正確保留所有分支,然後使用--bare選項svn-clone

prompt$ git branch -a 
* master 
remotes/BRANCH_1 
remotes/BRANCH_2 
remotes/trunk 

我需要BRANCH_1和BRANCH_2子公司,但似乎並不爲:運行抓取,如果我看着枝頭我以後

git svn init -s --username=$SVNUSER --no-metadata http://URLTOSVN/$REPO 
git config svn.authorsfile ../$USERFILE 
git svn fetch 

:我創建使用回購創造它們。現在當我使用--bare選項克隆這個時,我可以將它放在我的中央倉庫中,它忽略了那些遠程參考,並且我所得到的git倉庫根據我所知可以不知道這些分支。我需要這些分支在我的結果回購。我錯過了什麼?

回答

0

這意味着遠程分支機構可用,但您目前沒有將其作爲本地分支機構。你應該能夠用一個git檢索它們取:

git fetch origin [remote-branch]:[new-local-branch] 

git fetch origin BRANCH_1:BRANCH_1 

這裏有一個bash腳本我爲SVN回購轉移到以前的git使用。這會給你這是在當前目錄運行在機器上裸露的git倉庫:

#!/bin/bash 

REPO=$1 
REPO_tmp=$REPO"_tmp" 
USERFILE="/tmp/users.txt" 

echo $REPO " > " $REPO_tmp 

mkdir $REPO_tmp 
cd $REPO_tmp 
echo `pwd` 

svn log http://URLTOSVN/$REPO|grep \| | awk 'BEGIN { FS = "|" }; {print $2}' | awk '{print $1 " = " $1 " <" $1 "@domain.com>"}' | sort | uniq > $USERFILE 

git svn init http://URLTOSVN/$REPO --no-metadata 

git config svn.authorsfile $USERFILE 
git svn fetch 

cd .. 

git clone --bare $REPO_tmp $REPO.git 

這也會保護你的svn日誌歷史記錄。你可能需要擺弄連接參數,因爲我實際上使用了svn + ssh,而不是http。看着回購我導入,然後克隆是確實有分支我看到這樣的例子:

git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/signup 

在你裸露的回購協議的分支機構應該只是有他們的名字。即:

git branch -a 
* master 
    BRANCH1 
    BRANCH2 

但是我發現我能夠創建一個名爲遙控器/ BRANCH1分支,所以它可能是你確實有當地的分支機構那些剛剛古怪的名字命名。你可以嘗試使用:

git checkout remotes/BRANCH_2 
+0

謝謝。當我嘗試我得到 '致命︰'起源'似乎不是一個混帳存儲庫 致命︰遠程端意外掛斷' 我想這是因爲 - 無元數據標誌? 我也想在腳本中做上述其他回購,所以我可能不知道分支的名稱。似乎應該有一種方法可以在執行svn提取時從所有遙控器自動創建本地分支? – Chrissy 2012-02-09 23:25:53

+0

如果你使用'git fetch remotes BRANCH_1:BRANCH_1',你會得到什麼? – Ilion 2012-02-09 23:55:10

+0

當我執行'git fetch remotes'而不是'git fetch origin'時,我得到與上面相同的錯誤。 – Chrissy 2012-02-10 00:33:00

相關問題