2011-07-09 169 views
10

一段時間以來,我一直在將Subversion存儲庫鏡像到Git存儲庫。這一直工作得很好。但是,由於虛擬服務器崩潰而沒有備份,我必須重新設置鏡像。我需要跟蹤的存儲庫差不多1200次提交,包含大量文件(這是Git鏡像的主要原因,因爲檢出副本的回購速度非常快)。使用git-svn重新啓用鏡像

我現在需要做的是讓我新克隆的Git鏡像再次跟蹤Subversion存儲庫。我沒有添加新的遠程參考的問題,但似乎無法弄清楚如何能夠再次將svn提交到Git分支。

我似乎收到的一個錯誤是Unable to determine upstream SVN information from working tree history

如何在現有的Git分支上重新啓用鏡像Subversion存儲庫,該分支僅位於來自Subversion存儲庫的幾次提交之後?

+0

據我所知,有沒有簡單的方法來做到這一點。(如果有一個複雜的方式,我不知道它。) – svick

回答

11

讓它再次運行的最簡單方法是從原始文件拷貝.git/svn目錄,因爲這是跟蹤額外的svn元數據的地方(假設git-svn配置相同)。

不過,既然你不用它試試這個:

  1. git svn init http://hostname/svn/repository與您之前使用的任何其他參數(?也許-s

  2. git checkout最新從SVN提交。

  3. 重新創建git-svn REF:git update-ref refs/remotes/git-svn HEAD(或者,如果你使用-s,這應該是refs/remotes/trunk代替)

  4. 從SVN因爲當前提交獲取最新:git svn fetch --parent。這應該爲你的整個歷史重建git-svn元數據。

+0

謝謝,這個伎倆!我還不能獎賞賞金(似乎要等待9個小時) – Htbaa

+0

我不太明白'git checkout'這個段落。我應該結帳什麼? –

+0

一個可能的候選人是'master',除非你從git-svn獲得最新版本後一直在'master'上進行操作。基本上你想'checkout'你在'git log'中看到的提交消息中有SVN信息的最後一次提交,這樣git-svn就可以從它離開的地方獲取它。 – dahlbyk

0

我發現了另一個方法在http://trac.parrot.org/parrot/wiki/git-svn-tutorial

添加的git-svn的元數據,GitHub的克隆

如果你想重新填充,能夠迅速通過完成 的SVN元把你最新的萊託回購克隆關閉gihub,並加入 這到你的.git/config

[svn-remote "svn"] 
     url = https://svn.parrot.org/parrot 
     fetch = trunk:refs/remotes/trunk 

然後運行這個命令查找「頂提交」

git show origin/upstream | head -n 1 

,並把該犯的散列到一個文件中的.git /參/遙控器/主幹 (顯然取代與上述命令的一個)

echo c85aaa38b99cedb087e5f6fb69ce6d4a6ac57a0b > .git/refs/remotes/trunk 

最後

git svn fetch