簡體   English   中英

Git 和 SVN 通過 git svn 分支合並。 哪種程序最好?

[英]Git and SVN via git svn branch merging. Which procedure is the best?

我正在使用 git svn 在 git 和 SVN 之間同步源。 我喜歡與分支機構合作,這就是問題所在。

我正在創建一個分支: git svn branch mybranch

之后我檢查分支。 在我修改了源代碼后,我准備將 mybranch 合並到 master 分支。

你怎么樣? git 合並不起作用, git merge --no-ff 創建單個提交。 您是否使用cherry-pick 來挑選那些提交? 如何在不丟失在 mybranch 中創建的提交的情況下將更改從 mybranch 集成到 master?

非常感謝!

SVN 中的分支和合並與 Git 中的分支和合並顯着不同。 Git的要好得多。 SVN 無法處理 git 所做的大部分合並。 以下是我建議的合並方式:

案例 1) 創建個人功能分支,然后將其合並回共享的 SVN 分支

在這種情況下,僅在 Git 中創建特征分支。 根據需要在 git 中提交。 如有必要,請隨時進行 rebase/squash。 當您准備好將更改合並回 SVN 共享分支時:

案例 1a)您希望將所有單獨的提交存儲在 SVN

重新設置您的功能分支,使其所有提交都在共享分支的尖端之后。 然后快進將您的功能分支合並到共享分支中。 這會在您的 SVN 共享分支中留下線性歷史記錄。 這個很重要。 SVN 無法處理非線性歷史。 現在您可以將您的共享分支推送到 SVN(請務必先從 SVN 更新)。

git checkout myfeature
git rebase master    # we need a linear history on master, so rebase
git checkout master
git merge myfeature --ff-only  # ff-only ensures a linear history
git svn rebase  #update from SVN
git svn dcommit #finally, commit to SVN

案例 1b)您只需要在 SVN 歷史記錄中進行一次提交。

在這種情況下,請執行合並 --squash。 這將向您的共享分支添加一個提交,您可以將其推送到 SVN。 您的功能分支應該被刪除(如果您想在 git 歷史記錄中保留您的單獨提交,則應將其替換為標簽),因為 git 將沒有合並歷史記錄,並且將來從分支進行的合並可能會導致不必要的沖突。

案例 2)您需要合並兩個 SVN 分支。

總是在 SVN 中合並 SVN 分支,而不是 Git。 SVN 無法處理 Git 合並,如果在 Git 中合並。 SVN 將來將無法毫無問題地合並這些分支。 如果 SVN 做到了,Git 應該仍然能夠檢測到合並。

或者,您可以在 Git 中進行所有合並。 由於 SVN 對這些合並一無所知(它不會知道提交是合並提交) SVN 將無法在沒有大量手動干預的情況下合並這些分支。 SVN 使用“mergeinfo”來跟蹤哪些提交已經應用於哪些分支,並且在 Git 中合並不會更新 SVN 的 mergeinfo。 所以你的選擇是總是在 SVN 中合並 SVN 分支,或者總是在 Git 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM