[英]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 --all
和git push origin --tags
,您就完成了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.