SVNリビジョンIDに基づいてコミットのローカルハッシュを取得したいときは、通常git svn find-rev
を実行します。しかし、このコマンドは、現在のブランチ、またはリビジョン後にコマンドで明示的に指定されたブランチ内のコミットのみを検索するという大きな不都合があります。`git svn find-rev`でリポジトリ全体を検索する
時々、私はリビジョンIDだけを知っているので、ブランチ名を知らずにローカルハッシュを探したいと思うことがあります。 git svn find-rev
でそれを行う方法はありますか? SVNのリビジョンがユニークであることを知っていると意味があります。
EDIT:
それを行うには良い方法はありません、判明。 解決策を提供する答えを受け入れましたが、鉱山のような膨大な数の分岐を持つリポジトリを検索するには時間がかかります。私は自分のシェル関数を書いてはるかに高速に動作している、git svn
との組み合わせで、通常の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]"
}
あなたがそれを使用している場合は、GNUでいないのであれば、あなたはgrep -P
部品を交換する必要があるかもしれません/ Linux。リビジョンは "r"接頭辞の有無にかかわらず指定できます。
私のケースでは、リモートブランチも検索する必要がありますが、多くの時間がかかります。 – Thunderbeef
はい、かなりの時間が必要です。特に、多くの参考文献を持っている場合や、e。 g。すべてのリファレンスを与え、リビジョンが複数のブランチ、またはいくつかのブランチといくつかのタグにある場合、結果は複数回取得されます。しかし、私が知っている唯一の短い方法です。それ以外の場合は、基本的に同じことを行い、結果を見つけたらすぐに停止するループを作成する必要があります。 – Vampire
さて、リポジトリ全体で確実に動作し、何かが見つかるとすぐに停止する別の1ライナーを投稿しました。 eにソートを追加することで、少し修正することができます。 g。最初にローカルブランチを調べ、次にリモートブランチに入り、次にタグなどにします。 – Vampire