2009-02-18 101 views
3

下面的svn分支已經被添加到.git/config文件中。Git SVN偶爾獲取任何東西

 
[svn-remote "svnb02"] 
     url = https://svn/repos/Project/branches/b02 
     fetch = :refs/remotes/git-svn-b02 
[svn-remote "svnb03"] 
     url = https://svn/repos/Project/branches/b03 
     fetch = :refs/remotes/git-svn-b03 

但只有 「svnb03」 可以獲取使用以下命令:

 
git svn fetch -R svnb03 -r HEAD 

對於 「svnb02」,下面的命令將悄然迴歸沒有任何獲取。

 
git svn fetch -R svnb02 -r HEAD 

任何commed將受到歡迎。

+0

你能告訴我們什麼在.git/refs/remotes? – 2009-03-04 16:14:24

+0

.git/refs/remotes中有2個文件。文件內容是這樣的:6f5e2e7dca4a351321f8651f5865ac4ca2bcb256 混帳svn的 混帳svn的-B03 感謝 – Lei 2009-03-04 23:35:40

回答

2

也許分支HEAD未設置。看看.git/remotes/svnb02/HEAD。如果它缺少或不是最新的,這可能會解決您的問題。

Git有代碼在這種情況下找到HEAD,但顯然git svn沒有;有關這方面的作品有一個patch

如果沒關係,那麼我會在配置文件中尋找svn.remote.svn.變量的奇怪條目或.git/remotes目錄中的奇怪條目。

這是所有的猜測。奇怪的情況通常有一個奇怪的解釋。祝你好運。

編輯 - 我假設svnb02有新的修訂,當你有這個問題。如果有未取回的修訂版,您的命令只會從svn中讀取。

+0

感謝保羅,我有點停留在這一個。 +1 – VonC 2009-02-19 21:35:49

+0

是的,昨天我很期待有人對此有所迴應,我可以從中學習。這有點像試圖通過電話解決管道問題。 – Paul 2009-02-19 21:47:46

1

注意我是一個新用戶,所以在我的回覆中只能有一個超鏈接。假定BASE是「https://svn/repos/Project」。

我的答案並非直接引起這個問題,而是密切相關,幾乎肯定是一個因素。

該問題與您將SVN分支視爲git主幹有關。我發現新版本的git(1.6+)不允許你檢出分支或標籤作爲git主幹。 Git採用標準佈局。在你的情況下,它可能會假設。

幹線 - {BASE} /主幹/ 分支 - {BASE} /分支機構/ 標籤 - {BASE} /標籤/

由於B02和B03均設有分部的孩子就認爲他們是分支,而不是樹幹。在後期的1.5.x版本中,我發現行爲不是非常一致,但在1.6.x版本(尤其是後來的1.6.x版本)中,行爲是完全可repoducable的。

圍繞這項工作很適合我很好是明確地聲明標籤和分支URLS:

混帳SVN的init -T {} BASE /分支機構/ B03 -b {} BASE/anydir -t {BASE }/tags git svn fetch -r33666#其中33666是最新版本。

在我建議使用git svn rebase之後。

2

如果請求的修訂版本(HEAD)不在主幹上,則會發生這種情況。我們的構建腳本在成功構建後會自動標記源代碼,所以在我的情況下,最後的svn修訂版很少指向主幹,所以我得到了很多。下面的腳本將獲得幹線的最後修改版本和使用進行提取時:


#! /bin/sh 
URL=$1 
# git-svn fails to pull files if specified revision is not in path specified 
# so find the last changed revision and use that 
REV=$(svn info ${URL}trunk | grep "Last Changed Rev:" | awk '{print $NF}') 
[ -n "$REV" ] || { 
    echo "Revision not found. Check URL" 
    exit 1 
} 
git svn init "$URL" -s --prefix svn/ 
git svn fetch -r $REV 
3

混帳svn的克隆也將失敗默默如果你的顛覆回購沒有標準佈局樹幹,樹枝和標籤在頂層。如果是這樣的話,重構你的repo和git svn clone應該可以工作。