让`git svn find-rev`搜索整个存储库

时间:2017-12-02 20:41:43

标签: git svn version-control git-svn

当我想根据SVN修订版ID获取提交的本地哈希时,我通常会运行front-end。但是,一个很大的不便是这个命令只会查找当前分支中的提交,或者在修订后在命令中明确指定的分支中查找。

有时,我只知道修订版ID,我想在不知道分支名称的情况下找到本地哈希。有没有办法用git svn find-rev来做?知道SVN修订是独一无二的,这是有道理的。

修改

事实证明,没有好办法。 我接受了答案,它提供了一个解决方案,但是搜索具有大量分支的存储库需要很长时间,比如我的。我最终编写了自己的shell函数,并将常规git svn find-revsvn结合使用,效果更快:

git svn

如果您使用它,如果您不使用GNU / Linux,则可能需要替换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" "$@" } 部分。可以使用或不使用“r”前缀来指定版本。

2 个答案:

答案 0 :(得分:2)

要在所有本地分支机构中搜索,您可以。 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)')

答案 1 :(得分:0)

arraylist.add(0, object) 确实显示当前分支的提交sha-1值。但是你可以使用shell脚本从整个仓库中搜索提交

例如,如果您想从修订版git svn find-rev获取相应的提交,那么您可以将变量r9值指定为rev,如下所示:

r9