2013-02-28 98 views
1

我想用git-svn回購使用git-bundle。基本上,我需要創建一個脫機的git倉庫,它擁有我們生產的SVN系統的克隆。 SVN倉庫是通過git-svn克隆的,效果很好。它克隆我們的代碼,並將其列在遙控器/ *下。git捆綁與git-svn

現在很難的部分。我需要保持這與我們的離線存儲庫同步。離線環境沒有互聯網訪問,並且只會通過單向方法獲得更新(例如cd等)。這是一個單向交易。我想用git-bundle來做到這一點。這個問題似乎歸結爲git-svn將svn存儲庫標記爲遠程的事實。我曾嘗試使用git bundle create ____.bundle --all ...查看捆綁包,但它只包含我的主人。它不包括遙控器參考。但是我需要獲得所有這些信息。

這是否有意義?任何提示/建議?應該清楚的是,我們不會提交SVN端的git倉庫,它將是隻讀的。在離線方面,我們將分支遠程分支,並在那裏提交。

謝謝!

回答

3

儘管git svn最初設置了一些東西,使得svn分支顯示爲 遙控器,可以通過更改用於創建分支的refspec來更改它。 但是,這應該在從svn存儲庫獲取任何內容之前完成。

git svn init --stdlayout http/svn.server/path svnclone 
cd svnclone 
edit .git/config 

然後改變fetchbranches線,也可能是tags線 樣子:如果svn庫沒有使用標準佈局

fetch = trunk:refs/heads/trunk 
branches = branches/*:refs/heads/* 
tags = tags/*:refs/tags/* 

,您可以指定爲 通常在致電git svn init。在這種情況下,您希望將上述行的 部分保留在冒號之前,因爲它們只是在冒號後更改 部分。

完成設置後,您可以使用git svn fetch實際複製 內容。由於分支進入refs/heads命名空間,git包括 bundle命令將把它們視爲本地分支。只要該克隆 僅用作其他克隆的源(通過捆綁或僅使用 使用克隆命令),它應該不成問題。雖然如果有svn 分支名爲mastertrunk這很可能是一個問題。

+0

謝謝,我試過了,但遇到了問題。我設置conf來獲取trunk到refs/svn/trunk,並且分支到refs/svn/branches/* ...他們似乎不會出現。我用--stdlayout和--normalize-url做了一個init。運行git分支-a只顯示主人......但是如果我運行git show-ref,他們似乎都顯示出來了。任何想法如何解決這個..? – jon 2013-02-28 18:18:40

+1

只有'refs/heads'中的ref纔會被git視爲正常分支。嘗試使用'refs/heads/svn/trunk'和'refs/heads/svn/branches *'代替。 – qqx 2013-02-28 19:31:59

+0

工作,謝謝! – jon 2013-03-01 04:47:34