簡體   English   中英

有沒有一種方法可以將提交歷史從SVN存儲庫合並到Git分支?

[英]Is there a way to merge the commit history from an SVN repository to a Git branch?

目前,我們有幾個小型的半相關SVN倉庫,它們在提交時一直處於非活動狀態。 但是,有時需要使用它們和/或需要回顧其提交歷史記錄。 我們希望將所有這些移動到一個預先存在的Git倉庫中,因為這些天我們的大部分工作都是在Git上完成的...

在進行研究時,我想實現的目標是為每個SVN存儲庫都具有一個Git子樹分支,該分支具有所有提交歷史記錄。 但是,git-svn似乎只允許我將1個SVN存儲庫與1個Git存儲庫相關聯,因此我必須首先為每個項目創建一個git存儲庫,然后在最終存儲庫中轉換為子樹。 (我認為)

有沒有一種方法可以將歷史記錄從SVN存儲庫直接合並到我的Git存儲庫中的分支上,以便我可以有效地跳過創建冗余Git存儲庫的步驟?

一切都在git中更容易。 我會使用git2svn類的工具將Subversion存儲庫導入git。

在git中,您可以設置帶有分支的新存儲庫。 您可以設置每個分支以跟蹤一個轉換后的Subversion存儲庫。 獲取變更集后,您可以使用git remote remove清除遠程跟蹤。 這樣就為您提供了一個存儲庫,其中包含分支上Subversion的各種變更集。

因此,我想要避免使用額外存儲庫的原因是我們使用GitHub來存儲我們的存儲庫,而我需要創建的額外存儲庫使我們超出了當前計划的限制。

因此,我發現訣竅是將所有存儲庫都保留在本地。 我知道這是可能的,但不確定如何引用本地存儲庫。 事實證明,這再簡單不過了! 這是我經歷的步驟:

對於每個SVN存儲庫:

git svn clone http://svnhost.com/path/to/svn/repo

這將創建一個本地的Git存儲庫,其中包含SVN的所有歷史記錄(即使時間戳記也保留了!)。 接下來,轉到您要合並到的倉庫。 創建一個分支,然后從以下位置提取代碼:

git checkout -b newsvnbranch1
git pull path_to_newsvnbranch1_git_repo

現在,剩下的步驟不再是原始問題的一部分,但它們是我需要完成的最終目標-所有SVN存儲庫和歷史記錄合並在一起,但是在它們自己的目錄中。

git mv trunk newname1
git checkout master
git merge newsvnbranch1

為每個SVN存儲庫完成這些步驟實際上會使原始Git存儲庫具有以下結構:

original
|-newname1  (containing the contents of the first SVN repo)
|-newname2  (containing the contents of the second SVN repo)
|-newname3  (and so on...)

並且, git log現在將顯示每個交織的回購的歷史記錄。

暫無
暫無

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

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