2015-06-04 21 views
0

我正在尝试从SVN到Git的单向迁移。尽管我的回购大部分时间都很顺利,但每隔一段时间,我都会得到一个SVN标签的“重复”参考,我不知道为什么。从SVN迁移到Git - 带“@”的重复标签?

作为一个例子,下面是一个SVN repo's/tags目录的快照,用TortoiseSVN的Repo Browser显示。通知标签“657_RemoveTravellogProgressbar”:

SVN repo

在迁移到Git的,如果我查看git的内容/填充裁判,在广大大部分标签获得预期 - 每一个条目。奇怪的是,这个“657”的标签(和另外一个)产生多个条目,有的跟着以@ - 值:

07d524b93e8fc6957d06f687f83db0ba897890a9 refs/remotes/tags/657_RemoveTravellogProgressbar 
ee48ab8efa3f4ed5f54d0d1a3dd8fac76205ab9e refs/remotes/tags/[email protected] 
23eccb461e341a2f7bd0af03159c61600c888e7c refs/remotes/tags/[email protected] 

为了我的远程SVN标签/分支转换为真正的Git标签/分支机构的迁移回购协议,我用下面的命令(从this方便教程):

git branch -r | sed -rne 's, *tags/([^@]+)$,\1,p' | while read tag; do echo "git tag $tag 'tags/${tag}^'; git branch -r -d tags/$tag"; done | sh 
git branch -r | grep -v tags | sed -rne 's, *([^@]+)$,\1,p' | while read branch; do echo "git branch $branch $branch"; done | sh 

执行上面的命令后,我把我的迁移的Git回购协议裸回购&克隆一遍(除去SVN引用)。如果我再查看其与TortoiseGit版本图,不出所料一切......除了那怪异的657标签(还有一)在一旁:

Git Revision Graph

所以,问题是:是什么导致了刚那两个标签(超过几十个)将以这种方式进行迁移 - 他们最终在Git中引用多个引用 - 而99%的标签出来就很好?什么是避免它的正确方法(实现“一致”修订图)?请注意,标签/分支转换命令显式在名称中查找“@”;显然这篇文章的作者知道这可能会发生......但我无法弄清楚为什么。

〜编〜

看着我的源SVN回购的版本图,没有显示657标签:

SVN Revision Graph

如果我查看提交日志开始在657标签,它只返回一小部分提交(从任何其他标记开始显示历史回到开始时间,如预期的那样)。所以它看起来像SVN源代码的源代码是一团糟 - 虽然我再也不知道为什么/什么 - 或者为什么这会在Git中产生多个657?

回答

0

你有没有注意到,你必须为每个标签,它有3个不同的SHA1代码如下: 07d524b93e8fc6957d06f687f83db0ba897890a9参/遥控器/标签/ 657_RemoveTravellogProgressbar ee48ab8efa3f4ed5f54d0d1a3dd8fac76205ab9e参/遥控器/标签/ 657_RemoveTravellogProgressbar @ 327 23eccb461e341a2f7bd0af03159c61600c888e7c refs/remotes/tags/657_RemoveTravellogProgressbar @ 657

请使用以下内容获取SHA1的详细信息:(您可能会找到答案)

混帐猫文件-p 23eccb461e341a2f7bd0af03159c61600c888e7c

混帐猫文件-p ee48ab8efa3f4ed5f54d0d1a3dd8fac76205ab9e

+0

ee48ab8efa3f4ed5f54d0d1a3dd8fac76205ab9e收益率承诺相当于SVN#327(如我期望的 - 它列为参/遥控器/标签/ 657_RemoveTravellogProgressbar @ 327)等。我仍然不确定如何使用它来确定为什么它实际上正在发生(只是这2个标签),但... – Metal450