簡體   English   中英

為什么在運行git fetch -p origin之后,GIT為什么要刪除克隆的SVN存儲庫的所有分支?

[英]Why is GIT deleting all branches of a cloned SVN repo after running git fetch -p origin?

我使用git svn clone --stdlayout克隆了SVN存儲庫。 克隆存儲庫后,我使用atlassian遷移腳本對其進行了清理

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git 
  --force.

然后我設置新的遠程服務器,並使用git push --all origin將存儲庫推送到新的遠程GIT服務器

在嘗試清理了更多內容之后,我還運行了git fetch -p origin但是刪除了所有原始的SVN分支:

 ...
 x [deleted]         (none)     -> origin/release_II
 x [deleted]         (none)     -> origin/release_III
 ... etc

克隆的SVN儲存庫是否正常? 在新的GIT存儲庫中,原始SVN分支似乎不是真正的分支。 在遷移過程中我忘記了什么嗎? prune命令似乎很難撤消。 如果將來運行(可能是偶然的)類似命令,我們如何確保不松開這些分支?

事實證明,我的SVN分支實際上並未轉換為真正的GIT分支。 因此,我看到的唯一分支是指向不再指向SVN存儲庫的遠程分支。 因此,運行修剪時,我所有的分支都被刪除了。

大多數svn-git遷移教程(包括git-book )和工具都假定您可以通過在克隆存儲庫上運行cp -Rf .git/refs/remotes/origin/* .git/refs/heads/來創建實際的git分支。 但是在我的情況下,分支位於特殊的“ svn”目錄中: .git\\svn\\refs\\remotes\\origin

我將在網上找到的一些bash腳本修改為以下內容:

# Convert SVN branches to GIT branches
for branch in `git branch -r | grep "origin/[^tags]" | sed 's/ origin\///'`; do
  git branch $branch refs/remotes/origin/$branch; 
done

# Convert SVN tags to GIT tags
for tag in `git branch -r | grep "tags/" | sed 's/ tags\///'`; do
  git tag -a -m"Converting SVN tags" $tag refs/remotes/$tag
done

現在我可以通過運行git branch和帶有git tag --list標簽來查看所有分支

添加一個遠程原點,運行git push origin --allgit push origin --tags ,您就完成了。

暫無
暫無

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

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