gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:10:55 24 4
gpt4 key购买 nike

当我想根据 SVN 修订 ID 获取提交的本地哈希时,我通常运行 git svn find-rev。然而,一个很大的不便之处在于该命令只会在当前分支中查找提交,或者在修改后的命令中明确指定的分支中查找提交。

有时候只知道revision id,不知道分支名就想找一个本地hash。有没有办法用 git svn find-rev 来做到这一点?知道 SVN 修订版是独一无二的,这是有道理的。

编辑:

事实证明,没有什么好办法。我接受了答案,它提供了一个解决方案,但是搜索像我这样有大量分支的存储库需要很长时间。我最终编写了自己的 shell 函数,并结合使用了 svngit 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" "$@"
}

如果你使用它,如果你不是在 GNU/Linux 上,你可能需要替换 grep -P 部分。可以指定带有或不带“r”前缀的版本。

最佳答案

要搜索所有本地分支机构,您可以 e. G。做

git for-each-ref --format='%(refname)' refs/heads/ | xargs -l git svn find-rev r123456

为了让它更可靠但仍然快速,您可以使用更复杂的行来完成它,该行会遍历所有 refs 直到找到匹配项然后中止,例如。 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 - 使 `git svn find-rev` 搜索整个存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47612390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com