2010-08-09 148 views
13

使用git-svn將svn倉庫克隆到git中非常簡單。但是,我需要反過來這樣做。 我有一個周圍的git倉庫,想將它導入一個空的(除了從幹線,分支和標籤文件夾)保存所有的提交信息。將git倉庫導出到svn

我提到了svn repo的git-svn-clone,拉了git master並提交了。然而,我在svn中唯一提交的是一個說「合併git」的代碼

我也嘗試了另一種方式:克隆git repositoy並調用git svn init,但git一直說「無法確定上游SVN信息HEAD的歷史。「

是否可以通過git創建一個svn倉庫?

乾杯, 邁克爾

回答

6

甩開了其他回購的git的主分支當創建一個合併提交,因爲沒有共同的歷史。

你應該使用git pull --rebase(這將改變提交IDS,因爲它再現了提交)代替,那麼dcommit


,你也可以嘗試以下方法:

與SVN籤的初始版本(簡單地創建這些分支,標籤,軀幹文件夾和提交),然後再創建一個git的svn克隆(git svn -s clone svn://…

然後發出以下命令:

# create a ref to your "svn" commit 
git checkout -b svn 
# get all your "git" commits 
git fetch $your_remote_git_repo 
# create a ref to your "git" commit 
git branch master FETCH_HEAD 
# rebase the rest your git commits 
git rebase svn master 
# commit to svn! 
git svn dcommit 

編輯櫻桃挑只是必要的,因爲我迅速成立了Git倉庫中只有空提交

+0

我用git拉--rebase嘗試過,但它破壞了svn上游信息: #混帳svn的克隆-s #CD項目 #混帳拉--rebase混帳:項目 #混帳SVN dcommit 無法從HEAD歷史記錄中確定上游SVN信息。 也許存儲庫是空的。在/ usr/lib/git-core/git-svn第517行。 – 2010-08-09 15:51:35

+0

嘗試先用svn創建一個虛擬提交 – knittl 2010-08-09 16:05:08

+0

我不確定我是否理解你的意思:在git svn clone之後,我在svn中創建了一個測試提交。後git拉--rebase我仍然可以git svn獲取,但不是dcommit。我想只是輸入到svn忽略歷史。 – 2010-08-09 16:22:41

12

這裏是我的食譜通過svn發佈混帳回購協議:

svn mkdir --parents http://host/path/to/repo/{trunk,tags,branches} \ 
    -m "Standard layout for $project" 
git svn init -s http://host/path/to/repo/ 
git svn fetch 
git rebase trunk master 
git svn dcommit 

顛覆韓元不保留提交時間或作者身份。 如果你使用樹枝,上帝會幫助你。

+0

在做了「rebase」之後,git報告說這兩個回購現在差異很大。應該怎樣糾正這個問題呢? – 2012-09-28 16:13:10