[英]git-svn clone | spurious branches
我使用以下命令将 svn repo 克隆到 git 中,执行后,我看到了一些虚假分支。
git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp
git branch -a
*(no branch)
master
remotes/abc-1.3.x
remotes/abc-1.3.x@113346
remotes/abc-1.3.x@541512
remotes/branch_test_script
remotes/tags/modules-1.2
remotes/tags/modules-1.2@113346
remotes/tags/modules-1.2@516265
remotes/tags/release-1.1
remotes/tags/release-1.1@113346
remotes/tags/release-1.1@468862
remotes/trunk
在 svn 中创建的实际分支是 abc、branch_test_script、modules 和 release。 有人可以帮助理解 'abc-1.3.x@113346' 、 'abc-1.3.x@541512' ... 'release-1.1@468862' 等是什么吗?
我们怎样才能摆脱这些虚假的分支/它们意味着什么?
谢谢,
加亚特里
tl;博士:
如果为子目录(或为 git-svn 未跟踪的另一个目录)创建了分支(或标记),则git svn
会创建这些“@”-分支。 总会有一个同名的“常规”分支,但没有“@”后缀。 “@”-branch 仅作为常规分支的分支点存在。
注意:我为此提交了一个补丁; 此解释的编辑版本现在是官方git svn
联机帮助页的一部分,作为新部分“处理 SVN 分支”(自 Git 1.8.1 起)。
在 Subversion 中,分支和标记只是目录树的副本,因此可以(尽管通常不鼓励)从本身不是分支(或主干)的目录创建分支。 例如,通过将 /trunk/foo 复制到 /branches/bar,而不是复制 /trunk(可以说是“子目录分支”),或者复制位于主干/标签/分支结构之外的目录(这是在 SVN 中可能)。
然而,在 git 中,一个分支总是针对整个 repo,子目录分支不存在。 因此git svn
使用了一种解决方法。 如果它检测到从目录复制的分支,而该目录本身并未被 git-svn 跟踪为分支,它将创建一个新的历史记录。 例如,对于 /trunk/foo 复制到 r1234 中的 /branches/bar 的子目录分支,它将创建:
trunk
的历史记录时创建),以及新的。这样,对于子目录分支栏,在git中得到两个分支
我不太确定为什么要创建这个虚拟分支。 我认为这样做是为了表示分支从哪个版本分支的信息,并拥有分支的完整历史记录。
请注意,可以使用标志--no-follow-parent
关闭整个机制。 在这种情况下,每个 SVN 分支都会产生一个 git 分支,其中只有来自 SVN 分支目录的提交。 每个分支都将与历史的其余部分断开连接,并且将有自己的根提交,对应于分支中的第一个提交。
当我将我的 SVN 存储库克隆到 Git 存储库时,我也有如此奇怪的分支。
在查看了预期的分支(在您的情况下modules-1.2
、 abc-1.3.x
、 branch_test_script
和release-1.1
)之后,我注意到@revisionnumber
分支只不过是在其前缀分支中的提交。
如果您想手动执行此操作,请在分支abc-1.3.x
上打开gitk
并验证abc-1.3.x@113346
和abc-1.3.x@541512
出现在该分支的历史记录中。 如果是这样,您可以删除相应的分支。
如果您有许多分支或许多提交要浏览,这可能会有点麻烦。
自动方式:让git为你做:
git branch -r --contains abc-1.3.x@113346
会回声(或至少应该)
abc-1.3.x
abc-1.3.x@113346
abc-1.3.x@541512
这意味着您可以安全地删除abc-1.3.x@113346
因为它包含在abc-1.3.x
:
git branch -r -d abc-1.3.x@113346
由于 SVN 的线性历史,它当然也包含(较新的)提交541512
。
边注:
您可能已经注意到,您的 SVN 标签实际上并未转换为 Git 标签和本机 Git 分支。 这可以使用svn2git将 SVN存储库克隆到 Git 存储库中来实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.