2017-05-11 68 views
0

我們公司有兩個倉庫,svn倉庫(trunk)用於開發一個產品,git倉庫(master)用於部署多個產品(團隊)。我們的團隊希望從svn子目錄「trunk/web」合併到git子目錄「master/product-a/web-dev」。從svn合併到git,通過提交承諾

這些存儲庫具有不同的源代碼和不同的樹結構,但是我們要合併的兩個子目錄具有幾乎相同的源代碼。而且,它們沒有以任何方式鏈接,我們現在需要手動合併。 Git存儲庫由其他團隊共享,我們不能從頭開始構建它(不能做出可能會阻止每日部署的日常開發的重大更改)。

是否可以通過svn子目錄自動合併(通過一些命令或一個長程序)在指定修訂版本中自動合併git子目錄,通過commit提交?我們需要通過commit提交註釋來合併commit,以便我們可以通過svn中使用的redmine問題編號來跟蹤git上的更改。

我很感激任何幫助,謝謝。

+0

聽起來你需要看看git-svn,這樣你才能保持git與svn發生了什麼「同步」。在允許你設置你想要跟蹤的內容方面非常靈活......但是由於不得不通過版本「a la svn」進行修訂,所以通常非常緩慢。 – eftshift0

+0

你爲什麼不簡單地使用其中的一種?像Git一樣,爲什麼不用git做所有事情? –

+0

我們有兩個存儲庫的原因是,我們的git存儲庫(大於5GB)包含幾個團隊開發的幾個產品,並且針對部署進行了優化,因此需要多個修改以在本地tomcat服務器上運行一個產品。 svn存儲庫被修改用於開發,我們用它來開發每個團隊的產品。 – rhythm

回答

1

我決心在接下來的步驟問題:

  1. 通過SVN

    創建git的差異補丁
    svn diff --git -r 12345 > /tmp/12345-fileName.txt 
    
  2. 修改補丁文本文件路徑來解決SVN和Git
  3. 之間的路徑差異
  4. 在本地Git存儲庫上應用修補程序

    cd /path/to/local/git/repository & git apply /tmp/12345-fileName.txt 
    
  5. 提交上GIT中

    git commit 
    

我跑的Java程序生成和執行這些命令,並且通過修改重複上述步驟,修改,合併來自SVN修訂到Git的特定的範圍。

我知道這不是一個好的做法,但是我必須在版本控制系統沒有大的改變的情況下解決持續存在的問題。謝謝大家的意見。

0

是的,這可以使用git svn。設置:

git svn clone svn+ssh://[email protected]/trunk 
cd trunk 
git remote add origin [email protected]:example/develop.git 
git fetch origin 

這將建立一個名爲git-svn(SVN主幹)一個分支一個Git倉庫,並另一個名爲master分支(GIT發展)。

然後申請提交:

git checkout master 
git svn fetch 
git cherry-pick git-svn...git-svn~10 
git push 

...這將適用於幹線的最後10個提交,並承諾他們發展。

+0

謝謝你的建議。是否有可能從svn子目錄「trunk/web」合併到git子目錄「master/product-a/web-dev」?我們的svn倉庫僅適用於一種產品,但git倉庫包含多種產品。 – rhythm

+0

是的。我不太清楚細節,但它看起來像這樣:'git format-patch trunk/web/&& git am -3 --directory = master/product -a/web-dev /'。有關信息,請參閱'man git-format-patch'和'man git-am'。 –