[英]Git with SVN trunk and branches
由於我一直在使用Git,我喜歡你可以創建一個本地分支,你可以壓縮到你的主分支和DCommit到SVN(在主干上),然后刪除那個本地分支(在Git上)。
現在我想了解如何處理SVN分支。 我需要與團隊合作開發新功能,但我們不想在Trunk上這樣做。 所以顯然我們需要從主干分支並在該分支上工作,直到我們對工作感到滿意並合並回Trunk。
關於如何從Git前端角度做到這一點的任何想法? 我確信那里有足夠的資源,但我沒有找到能夠解釋這一點的東西。
所以為了確保我解釋自己,我知道如何單獨使用Git和SVN中繼。 這很容易也很好。 但是我需要從trunk上分支SVN並使用Git在該分支上工作(希望仍然可以使用Git訪問SVN中繼),直到工作完成,然后將該分支合並回SVN上的trunk(再次使用Git)。 如果有人能讓我對此有所了解,我將非常感激! 是否可以在一個Git倉庫中擁有它?
提前致謝。 (如果還不清楚請告訴我)。
幾個月前我在這個主題上發表了博客: http : //www.jillesvangurp.com/2012/08/04/git-presentation/
簡而言之,您可以在單個git存儲庫中跟蹤多個svn分支,但實際上您不應該這樣做。 有一次搞砸了我基本上再也不會嘗試在一個存儲庫中跟蹤多個svn分支。 它太易揮發,太容易在svn中造成嚴重損壞。 基本上一切都在當地很好,我提出了我的改變。 但實際上我重新排序了一些真正不應該重新排序並在上游造成很多損害的提交。 最后我不得不做一個大的svn還原。 非常尷尬。
因此,使用單獨的git存儲庫來跟蹤每個svn分支,並將這些存儲庫用作僅在git存儲庫上的遠程存儲庫,您可以在其中實際工作時推送到不同的遠程存儲庫。 像這樣隔離git和svn很有意義。 確保您的歷史記錄保持線性(svn不做非線性)並確保始終對上游進行折舊。
在這種情況下,在分支/存儲庫之間移動提交(在git世界中同樣的事情)的更安全的方法是使用git format-patch和git am。 或者,您可以在存儲庫中使用git cherry-pick。
我終於發現了為了使用Git處理SVN分支所需要做的事情。 我已經嘗試了下面提到的東西(除了我指定的地方)所以我相當自信,只要我不做任何有趣或不合適的事情,我從Git到SVN的提交應該工作得很好。 但是,對於可能發生的任何問題,我當然不承擔任何責任! 我願意接受進一步的評論/評論。
即使我沒有使用標准布局克隆SVN repo,我也應該配置指向subversion上的相關SVN路徑的遙控器。
要克隆SVN分支(SVN路徑應指向包含主干,分支和標記的根路徑):
git svn clone -s http://myrepo.com c:/my/local/path
如果您已經擁有SVN分支的克隆,則需要手動將遙控器添加到其他SVN分支,請檢查以下內容:
重要的是,您有一個跟蹤遠程分支的本地分支。
git checkout -b localbranch remotes/remote_branch
現在你可以針對那個本地分支進行提交,每次完成時就像在trunk中一樣:
git svn fetch
git svn dcommit
當你最終完成SVN分支並且想要合並到trunk時,你可以執行以下操作(它從該分支獲取所有內容並將其重新綁定到master):
git checkout master
git merge localbranch
git rebase -i trunk (just save the message)
git svn fetch
git svn dcommit
如果你願意,你也可以直接進行壁球合並(如果你不想帶來所有那些小簽到):
git merge --squash localbranch
git svn fetch
git svn dcommit
在進行真正的DCOMMIT之前,您可能正在進行干運行,以確保一切正常(包括目的地)。
git svn dcommit -dry-run
但是,如果您預計合並沖突(這是我在網上看到的,但我還沒有嘗試過,我只是提到它)在上面顯示的git checkout master
主線之前執行以下操作。 這是一個本地分支,它不跟蹤應該用於解決合並沖突和內容的遠程分支。 這是否必要是另一回事。
git checkout -b merge_work master
git merge localbranch
git checkout master
git rebase merge_work
我正在為自己和其他可能希望將來嘗試這一點的人寫下這篇文章。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.