2013-05-15 61 views
4

我的隊友和我都在努力讓我們的svn庫與我們的git的一個同步。 我們正在開發一個項目,我們被要求在svn倉庫(由assembla.com站點託管)上分享我們的代碼。 由於我們習慣使用git來控制我們的代碼,我們決定充分利用git提供的git svn特性。 爲了分享我們所有的工作,並將它保留在正確的分支中,我們也有一個遠程倉庫(bitbucket)。保持svn庫同步使用git一個

到目前爲止承諾與GIT我們所有的工作都沒有給我們帶來麻煩,但是當涉及到同步錯誤後的svn庫的錯誤都上來了。

我跟着這個答案Pushing an existing git repository to SVN將svn存儲庫連接到git,但經過一些合併和提交後,我收到錯誤,我無法再提交更改。

現在我有一個分支,它是SVN /軀幹的副本

$ git checkout -b assembla_copy -t svn/trunk 
    Branch assembla_copy set up to track local ref refs/remotes/svn/trunk. 
    Switched to a new branch 'assembla_copy' 

$ git svn rebase svn/trunk 
Current branch assembla_copy is up to date. 

要與我的主分支我都試圖

git merge master 

git rebase master 
它同步

雖然git rebase master開始應用自第一次提交以來的所有更改,並提供大量和大量衝突(當我已經在svn/trunk中進行了這些更改時,因爲在某種程度上,我設法對在線存儲庫進行了一些更改;我們目前AR R46),git merge master去罰款,但後來當我dcommit,所有的變化歸納起來只有一個提交它指出,「合併分支‘主人’變成assembla_copy」,而我更希望它會犯所有單獨的提交(就像它在開始時所做的那樣)。

如果我從主分支dcommit,所有提交是分開的,但隨後的主分支衍合,使所有的有一個主分支提交作爲父示出了分離形式的主分支..

你能否向我解釋一下正確的工作流程,以便擁有一個反映git倉庫的svn倉庫,所有的工作都完成了(svn只是一個副本)? 你能只使用標準的Git命令,而不是複雜的bash腳本,我已經看到了一些答案,同時尋找在上週的解決方案?

謝謝!

回答

7

我使用的是具有本地git倉庫爲某種花哨的svn客戶端的一個遠程SVN倉庫的目標以下工作流程。

  • 使用git svn clone ...初始化存儲庫。這會讓主分支出現SVN主幹 - 在你的情況下,這應該是svn/trunk。
  • 從主創建一個本地的「基線」分支:git checkout -b local。這將是master你的情況。
  • 開始工作的本地特性分支 - git checkout -b feature
  • 當我準備提交到遠程SVN:
    • git checkout master
    • git svn rebase - 獲取SVN更新
    • 如果有任何更新,我將它們合併到local
    • git rebase --onto master local feature - 與local基準相比,在功能分支中所做的更改應用於master分支
    • 合併特性分支成主:git checkout mastergit merge feature
    • git svn dcommit - 提交更改到SVN
    • 合併新功能納入當地基準:git checkout localgit merge master - 一樣的,如果別人一直致力於東西SVN。

希望這會有所幫助。