让`git svn find-rev`搜索整个版本库
当我想要根据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”前缀来指定修订版本。
回答:
要在所有地方分公司,你可以通过电子邮件进行搜索。 G。做
git for-each-ref --format='%(refname)' refs/heads/ | xargs -l git svn find-rev r123456
拥有它更可靠,但仍快,你可以用一点点做更复杂的线条,看起来在所有裁判,直到找到一个匹配,然后中止,E。 G。像
while read ref; do result="$(git svn find-rev r123456 "$ref")"; [ -n "$result" ] && echo $result && break; done < <(git for-each-ref --format='%(refname)')
回答:
git svn find-rev
确实显示来自当前分支的提交sha-1值。但你可以使用shell脚本搜索整个回购的提交。
这样的,如果你想从修订r9
相应提交的,那么你可以为r9
如下指定变量rev
值:
#!/bin/sh rev="r9"
for branch in $(git branch -r)
do
{
git checkout $branch
sha=$(git svn find-rev $rev)
if [ ! -z "$sha" ]; then
{
echo "The revision $rev has the corresponding commit is $sha. And the commit is on $branch branch."
break
}
fi
}
done
以上是 让`git svn find-rev`搜索整个版本库 的全部内容, 来源链接: utcz.com/qa/258244.html