簡體   English   中英

SVN到GIT,根目錄中有標簽

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

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