2011-09-02 58 views
7

我見過有人建議使用git-svn來進行合併並將其提交回svn。如何使用git-svn將更改從trunk中合併到svn中的某個分支?

我正在尋找一個好的一步一步的指導。

  • 這是值得的麻煩,或者我應該使用svn來做到這一點。
  • 人們會看到我使用過git嗎?有沒有關於svn合併的元數據?
  • 我可以做一個我選擇的樹幹和1個分支的克隆嗎?
  • 我需要一個完整的克隆嗎?還是我可以從創建分支的地方導入它?
+0

它可以是值得的,它不會看到你使用git而不是svn。儘管如此,你要非常小心地使用'git rebase'。它真的可以讓svn歷史一塌糊塗。 –

+0

什麼樣的合併?選定的提交/修訂?或者,這是一個功能分支,您希望保持最新的幹線提交,意圖重新集成到幹線? –

+0

有關分步指南:從http://myhumblecorner.wordpress.com/2011/08/25/git-svn-cheatsheet-for-git-rebels-in-an-svn-workplace/ git checkout ; git merge --squash ; git commit; git svn dcommit#--squash是關鍵' –

回答

3

是否值得麻煩還是應該使用svn來做到這一點。

我認爲這取決於您希望在SVN中保留多少信息。如果你使用git進行合併,我相信SVN不會知道這些更改是從哪裏來的,換句話說,它看起來像是SVN主幹,分支仍然是獨立的。

人們會看到我使用過git嗎?有沒有關於svn中 合併的元數據?

不,它只會看起來像一個新的提交到主幹上。

我可以做一個我選擇的樹幹和1個分支的克隆嗎?

如果你的意思是克隆你的git-svn到一個新的git倉庫,那麼是的。只需克隆git-svn並刪除多餘的分支,或者在克隆之前直接在git-svn repo中執行該操作。

這裏是一篇文章如何convert an SVN repo to a git one。我認爲大部分情況適用於這種情況。

我需要一個完整的克隆嗎?還是我可以從 分支的製造點導入它?

除非使用--depth選項,否則Git克隆通常是完整克隆。如果你想拋棄以前的歷史,你可以隨時壓縮所有提交到一個較舊的提交,或者刪除.git目錄並初始化一個新的回購。

+2

Git可以使部分克隆看到http://stackoverflow.com/questions/747075/how-to-git-svn-clone-the-last-n-revisions-from-a-subversion-repository – hdorio

+0

@Doud,謝謝你更正。 – cmcginty

1

我已經閱讀了一些人的建議這樣的文章,但我認爲它應該只用於,如果你們都使用GIT和SVN爲相同的代碼(與git的本地回購和svn託管回購)。我會建議你只是堅持您的VCS並獲得像BeyondCompare或萬花筒適當合併工具

大約GIT-SVN一個小教程,可以發現在

http://flavio.castelli.name/howto_use_git_with_svn

+0

+1這是一篇不錯的博客文章,但它不包括合併。 –

10

我已經使用了這篇文章中的說明,取得了很大的成功。http://justaddwater.dk/2009/03/09/using-git-for-svn-repositories-workflow/

我使用git合併分支,然後將它們提交到svn回購。這不會遵循svn的合併過程,所以這可能是其他用戶的問題。沒有設置svn:merge屬性

git-svn不會在svn回購中留下任何證據表明您正在使用git-svn。

+1

+1到目前爲止最好的答案。因爲你是戴夫。 –

+0

我想我錯過了一些東西。你是否說SVN分支應該在「git branch -a」中顯示爲git分支?我看到的唯一分支是我創建的分支和「遙控/ git-svn」。 SVN分支僅顯示爲其目錄結構。這些說明讓我懷疑SVN是否有服務器端的分支概念,我們在這裏沒有使用。 – benkc

+0

如果你發現這個,你錯過了git clone中的-s選項。 – boutta

相關問題