当我想要根据SVN修订版本id获取提交的本地散列时,我通常运行git svn find-rev
。但是,一个很大的不便之处在于,该命令只会查找当前分支中的提交或修订后的命令中明确指定的分支。让`git svn find-rev`搜索整个版本库
有时,我只知道修订ID,我想在不知道分支名称的情况下找到本地散列。有没有办法用git svn find-rev
来做到这一点?这是有道理的,知道SVN修订是独一无二的。
编辑:
事实证明,没有做到这一点没有什么好办法。 我接受了答案,该答案提供了一个解决方案,但搜索具有大量分支的存储库(如我的)需要很长时间。最后我写我自己的壳功能,结合使用常规svn
与git svn
,其工作方式要快得多:
gitrev()
{
if [ -z "$1" ]; then
echo "${FUNCNAME[0]} <revision> [git_args]"
return 1
fi
local rev b
rev="$1"
shift
b="$(svn log -v -c "$rev" "$SVN_BRANCHES_URL" | grep -m1 -Po '/branches/\K[^/]+')" &&
git svn find-rev "r${rev#r}" "origin/$b" "[email protected]"
}
如果你使用它,你可能需要更换grep -P
一部分,如果你不是在GNU/Linux操作系统。可以使用或不使用“r”前缀来指定修订版本。
似乎喜欢它,但在我的情况下,我也必须搜索远程分支机构,这需要很多时间。 – Thunderbeef
是的,可能需要相当长的一段时间,特别是如果你有很多参考资料,并且你的电子邮件。 G。给所有的参考文献,修订版本在多个分支,或者在一些分支和一些标签中,你会多次得到结果。但这是我所知道的唯一的方式。否则,您必须编写一个基本相同的循环,并在找到结果后立即停止。 – Vampire
好吧,我发布了另一个可以在整个存储库中可靠工作的单线程,并在找到某个东西后立即停止。您可以通过向e添加排序来修改它。 G。先查看本地分支,然后查看远程分支,然后查看标签或类似的东西。 – Vampire