svn - 使用 svn2git 转移的分支

标签 svn git

这个问题可能是因为我不了解分支在 SVN 和 Git 中的技术工作原理。

但是当我使用 svn2git 时,有些分支在 refs/remotes/中,有些不在。例如 trunk 是/refs/remotes/trunk。

当我在新的 git 仓库中检查 master 分支时,它不是 svn 主干,而是去年的一些旧分支(看起来它是完全随机选择的)。标记已正确移动。

如果我查看 Trac 中的 svn 存储库,它看起来确实布局正确(主干、分支、标签)并且主干指向它应该指向的位置。看起来正确显示的分支(没有远程)在 .git/config 中,其余的不在。

这是怎么回事,我应该怎么做才能正确转换 svn 存储库?我是否也应该将远程分支的定义也添加到 .git/config 中?然而,这并不能解决主干问题。

编辑:我刚刚意识到一件事:三个 Remote 与本地分支完全相同,区别在于有一个本地分支“master”和远程分支“remotes/trunk”,所有其他 19 个分支看起来相似。问题似乎是 master 没有指向“remotes/trunk”,而是指向一些随机提交。

这只是 svn2git 中的一个错误吗?

最佳答案

这一定是一个错误。根据 github 中 git2svn 的自述文件

and that the code checked into master ends up being what's currently in your svn trunk rather than whichever svn branch your last commit was in.

您可以尝试手动指定分支以查看是否会得到更一致的结果

 svn2git http://svn.example.com/path/to/repo --trunk trunk --tags tags --branches branches

如果这不起作用,你可以在你的 .gitconfig 文件中添加一个别名,你可以在 svn2git 之后运行,它将 master 替换为 trunk

[alias]
  fixport = !sh -c 'git checkout remotes/trunk trunk && git checkout master && git reset --hard trunk'

然后你像往常一样做你的 svn2git ... 当它完成时运行 git fixport 并且它会 check out remotes/trunk 的本地副本作为主干并重置 master 到等于那个。

关于svn - 使用 svn2git 转移的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3666435/

相关文章:

svn - 如何使用 Tortoise SVN 将 SVN 合并到分支 (SVN 1.6)

git 忽略行尾

git - 将 git 子模块 merge 到主存储库

Dropbox 中的 git repo,在 Linux 和 Windows 上同步,空白问题

git 未检测到某些文件的更改

git - 'git svn rebase' 和 'git rebase trunk' 之间的区别

java - 我可以使用java将文件夹中的文件分成1000个文件组吗

svn - 什么 VCS 允许我同时向多个待定提交添加更改?

svn - 如何在 SVN 上保存/恢复本地更改

git - 如何读取 git-ls-tree 输出的模式字段