簡體   English   中英

如何將帶有稍后創建的主干/分支的舊 SVN 存儲庫轉換為 GIT

[英]How to convert to GIT an old SVN repository with trunk/branches created later

我正在嘗試將一個非常舊的 SVN 存儲庫遷移到 GIT 維護歷史記錄,但請記住,存儲庫並不是一直都有主干/分支/標簽結構,而是在沒有它們的情況下創建的,並且存儲庫是稍后遷移到主干/分支/標簽結構。

我已經嘗試使用 git-svn 使用以下命令:

git svn clone <repo_url> --stdlayout

但問題是歷史在“創建的主干、分支和標簽”提交時被刪除,因此在該提交之前的所有內容都丟失了。 我也嘗試過:

git svn clone <repo_url> -T/ -bbranches -ttags

它獲取所有提交,但在提交圖中創建了一個真實的網格,因為它復制了分支和主干中的提交,並且不會在主分支和分支之間創建任何關系。 我嘗試使用以下命令對其進行清理:

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch branches tags" -- --all

它從主干分支中刪除了分支文件夾,大部分是正確的,(並刪除了許多重復的提交)並且還嘗試將主干文件夾移動到根目錄:

git filter-branch --tree-filter "if test -d 'trunk'; then  git mv trunk/\* .; fi" --tag-name-filter cat --prune-empty -- --all

但不起作用。 我正在使用 Windows,因此 git-svn 文檔中用於移動所有項目的命令對我不起作用(缺少 sed):

git filter-branch --index-filter \
    'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
            git update-index --index-info &&
     mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD

(我重寫為:)

git filter-branch --index-filter \
    'git ls-files -s | sed "s-\t\"trunk/\(*\)-\1-" |
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
            git update-index --index-info &&
    mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD

知道我正在嘗試做的事情是否可行,還是應該退出並僅保留歷史記錄,直到創建主干/分支/標簽?

我終於找到了一個解決方案:使用 svn-all-fast-export (svn2git) 我必須使用以下腳本創建一個包含所有歷史記錄的存儲庫:

create repository REPONAME
end repository

# Master branch

match /
  repository REPONAME
  max revision REVISION_BEFORE_TRUNK_BRANCHES_TAGS_CREATION
  branch master
end match

match /trunk/
  repository REPONAME
  branch master
end match

# Common branches

match /branches/([^/]+)/
  repository REPONAME
  branch \1
end match

# Ignore everything else
match /
end match

當我在 Windows 上時,必須在 Windows Substime for Linux 上編譯,安裝“build-essential subversion git qtchooser qt5-default libapr1 libapr1-dev libsvn-dev”; 或帶有以下庫的 cygwin(如本期所述)

gcc-g++ (v7.4.0-1)
libQt5Core-devel (v5.9.4-2)
libapr1 (v1.6.5-1)
libapr1-devel (v1.6.5-1)
make (v4.2.1-2)
subversion (v1.11.1-1)
subversion-devel (v1.11.1-1)

暫無
暫無

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

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