簡體   English   中英

將git存儲庫遷移到現有SVN存儲庫的分支

[英]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.

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