我使用git svn clone --stdlayout
克隆了一个SVN存储库。克隆存储库后,我使用atlassian migration script:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git
--force.
然后我设置新的远程并使用git push --all origin
在尝试清理更多内容之后,我还运行git fetch -p origin
但删除了所有原始SVN分支:
...
x [deleted] (none) -> origin/release_II
x [deleted] (none) -> origin/release_III
... etc
克隆的SVN存储库是正常的吗?看起来原始的SVN分支不是新GIT存储库中的真正分支。在迁移过程中我忘记了什么吗?修剪命令似乎很难撤消。如果我们将来(可能是偶然)运行类似的命令,我们怎样才能确保我们不会松开这些分支?
答案 0 :(得分:0)
事实证明我的SVN分支实际上并未转换为真正的GIT分支。所以我看到的唯一分支机构指向远程分支指向SVN仓库,而这些分支无法再到达。因此,运行修剪,我的所有分支都被删除了。
大多数svn-git迁移教程(包括git-book)和工具都假设您可以通过在克隆的repo上运行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
即可完成。