[英]Migrating a git repository to a branch of an existing SVN repository
最近,我一直在為我的公司從事Java項目。 對於這個項目,他們選擇使用SVN作為版本控制系統。 但是,在一開始,我沒有對該SVN信息庫的任何訪問權限。 因此,我一直在自己的計算機上本地工作於該存儲庫的某些快照,該快照由主要開發人員提供。 由於我對git有很多經驗(而對SVN則沒有經驗),因此我一直在使用git來跟蹤對項目所做的更改。
目前,是時候將我的更改集成到現有SVN存儲庫中了。 根據主要開發人員的說法,我必須將更改推送到SVN存儲庫的個人分支,以便他可以在將更改合並到master分支之前檢查我的更改。
實現這一目標的最佳策略是什么? 從git生成與SVN兼容的補丁集是一個好主意嗎? 這將使我能夠從SVN中檢出最新版本,並逐步嘗試應用我所做的每個git提交。
出現的另一個想法是將git存儲庫導入本地SVN存儲庫,然后嘗試將該本地SVN存儲庫遷移到遠程SVN存儲庫的分支中。 但是,我完全不知道這是否可行。
任何幫助將不勝感激!!
如果極有可能進一步開展該項目,我強烈建議您使用git-svn。 這樣,您可以在本地保留git的大部分功能(合並除外-僅對svn進行基礎調整),同時仍可以通過svn進行協作。
這些步驟可能像下面這樣,但是我是從內存中寫入的,並且沒有要檢查的svn。
首先,克隆svn項目。 -s
假定標准./trunk ./branches/* ./tags結構:
git svn clone -s <path to SVN> sync_repo
cd sync_repo
現在,我們需要找到將您的工作應用到的git點。 理想情況下,您應該知道svn修訂版,團隊負責人最初為您提供svn修訂版的快照,您可以使用該快照:
git svn find-rev r<svn revision>
git branch my_git_reintegration <SHA1 we've just found, otherwise svn/trunk or some other reasonable revision>
接下來,我們需要從本地git中提取您的更改:
git remote add my_origin <path to your original git repo>
git fetch my_origin
並在新分支的基礎上重新進行更改:
git rebase my_git_reintegration my_origin/master
如果在選擇my_reintegration
點時很幸運,那么在my_reintegration
期間應該沒有合並沖突。 重新設置my_reintegration
之后,我們將相應地移動my_reintegration
:
git push . HEAD:my_reintegration
此時,您的my_reintegration
包含git更改,但可能在過時的svn commit之上。 接下來,讓我們創建一個新的svn分支,您將在其中進行貢獻。 我假設您會分支:
git checkout origin/trunk
git svn branch my_svn_integration_branch
#those might be not necessary, but just in case
git svn fetch
現在,讓我們將原始更改基於此分支,並將其推送到svn:
git rebase origin/my_svn_integration_branch my_git_reintegration
#possibly resolve conflicts
#just for a safety, check the svn branch we target - should be my_svn_integration_branch
git svn info
#go!
git svn dcommit
此時,您應該在svn的my_svn_integration_branch
更改,您可以刪除原始的git存儲庫,並繼續使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.