[英]SVN to GIT with tags in root directory
我正在嘗試從結構如下的舊SVN存儲庫創建一個新的git存儲庫:
/root
trunk
build_scripts
packager
0.1.0
0.1.1
0.1.2
...etc...
0.x顯然在傳統上將位於tags
目錄中,並且是trunk
中的軟件版本,代表需要保留的打包軟件版本。 另外兩個是用於打包和測試的支持腳本。
這主要是我對存儲庫的承諾-每個發行版都是使用svn copy
命令創建的。
可能不是最佳實踐,但是要進行開發很容易-我檢查了構建環境,隨后檢查了主干以便我進行工作。 包裝腳本會復制新標簽,並在我准備就緒時為我創建一個可下載的軟件包。
我該如何清理並將其導入git存儲庫? 理想情況下,我想使用最佳做法,並希望保留所有歷史。
我試過使用svn2git
:
svn2git path-to-repo --trunk trunk --nobranches --authors=/path/to/authors.txt
它為我填充了一個帶有主干的倉庫,但是我沒有看到任何標簽( git tag
什么也沒有顯示)。 理想情況下,我也想帶其他腳本。
使用GIT的主要目的是我的開發方法-有時我會遠離測試機器進行開發,並且想提交到一個測試庫,在將其推向上游之前,我可以在其中修復錯誤。 現在,我只是將損壞的內容提交到中央SVN存儲庫,並在測試計算機上簽出。 那顯然很爛。
如果有必要,我很高興花一些時間清理SVN存儲庫-我現在還不准備拋棄它。
清理SVN存儲庫將無濟於事,因為您不能在現有修訂版中移動目錄,而這正是您要導入的目錄。
我沒有svn2git
經驗,但是有了git svn
我只會:
僅初始化中繼:
git svn init -A /path/to/authors.txt --prefix=svn/ -t trunk url://to/svn/root
通過手動編輯svn部分來手動列出我要導入的標簽和分支,如下所示:
[svn-remote "svn"] url = url://to/svn/root fetch = trunk:refs/remotes/svn/trunk fetch = build_scripts:refs/remotes/svn/build_scripts fetch = packager:refs/remotes/svn/packager tags = 0.*:refs/remotes/svn/tags/0.*
我不太確定標簽行是否會起作用; 如果不是,則始終可以顯式列出所有現有標簽。
一切設置完成后,運行git svn fetch
不幸的是,當在svn repo中創建一個新分支時,您必須在添加到git之前添加匹配的模式。 如果git-svn已經獲取了一個修訂版本並且由於沒有模式而沒有創建分支,它將無法返回到該分支,並且只會在其上導入任何新修訂版本。 而且我沒有找到任何辦法告訴它重新獲取這些分支。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.