2010-04-22 153 views
6

我正在使用svn。我有兩個分支,他們都進行了很多變化。 此外,其中一個分支很多文件被重命名,所以現在svn不能幫助我合併這些文件中的更改(衆所周知的svn限制)。git-svn merge 2 svn分支

  1. 是否有可能使用git-svn來執行分支合併?
  2. 請問git-svn也會重命名文件嗎?

感謝

+0

看到這個答案:http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to -help-out-with-svn-merge/3585702#3585702 – 2010-08-27 15:29:01

+0

查看http://stackoverflow.com/questions/714589/can-git-svn-correctly-populate-svnmergeinfo-properties ...「編輯:」部分第二個答案(不是接受的答案)是特別好的 – 2012-01-12 13:13:19

回答

7

git merge應該能夠檢測(達到一定點)重命名。

recursive

這隻能使用3路合併算法解決兩個頭。
此外,這可以檢測並處理涉及重命名的合併。
這是拉動或合併一個分支時的默認合併策略。

但是git-svn只能從/導入/導出到SVN,而不是合併。
並且合併是棘手:

CAVEATS

爲了簡單起見,用一個能力較少的系統(SVN)互操作,則建議所有git svn用戶克隆,提取和dcommit直接從SVN服務器,並避免git存儲庫和分支機構之間的所有git克隆/拉/合併/推操作。
在git分支和用戶之間交換代碼的推薦方法是git format-patch和git am,或者只是向SVN存儲庫傳送代碼。

運行git merge或git pull不建議在您計劃從中提交的分支上。 Subversion不代表任何合理或有用的合併方式;因此使用Subversion的用戶無法看到您所做的任何合併。此外,如果您從SVN分支的鏡像git分支合併或拉出,dcommit可能會提交到錯誤的分支。

如果合併,請注意以下規則:混帳SVN dcommit將嘗試在SVN的頂部犯

git log --grep=^git-svn-id: --first-parent -1 

提交名爲因此,您必須確保最近提交您想要提交的分支是合併的第一個父代。否則就會出現混亂,尤其是如果第一個父代在同一個SVN分支上是較舊的提交。

1

我曾經在大學的一個項目中遇到同樣的問題。我所做的是以下幾點:

  • 創建一個新的git-svn庫(git svn clone -s https://…
  • 合併分支機構,Git的(git checkout master; git merge branch
  • 結賬的樹幹與SVN(svn co https://…/trunk
  • 拷貝過來從git合併的文件
  • 用svn刪除剩餘的文件和目錄(svn rm
  • 提交svn(svn ci
  • 獲取Git中新提交
+0

感謝您的有益總結。 git合併是否容易,通過svn執行它更容易嗎? (我試圖找到這個答案:http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to-help-out-with-svn-merge) – inger 2010-06-05 19:37:32

+0

還有一件事,你是否試圖提交給svn?如果是這樣,你得到/期待什麼問題? – inger 2010-06-05 20:21:32

+0

@inger,沒有我與svn合作,以確保我不會推動只有git才能理解的半合併。 – knittl 2010-06-06 17:51:18

0

使用SVN合併功能合併SVN分支,它會更加快速。 這些問題使用Git是相當複雜的,它創造了太多的衝突...