所有 svn 修订号的映射 <=> git SHA-1 提交哈希

Map of all svn revision numbers <=> git SHA-1 commit hashes

git-svn需要重建其内部地图时,它输出想要的信息到STDERR:

Rebuilding .git/svn/refs/remotes/origin/trunk/.rev_map.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
r38601 = 28d3a624c5c96db9a1f45d8f261a9b0de1f6f288
r38652 = 74c55b8dff798e5ae1bc2ad00d8ec6eee4f2646b
r38744 = eb457e1949ecf854816ba9cf64b4bace710a7302
r38745 = 5bca99a37fbc6db72d2d50a75301185f4297926c
(...)

不幸的是,文件.git/svn/refs/remotes/origin/trunk/.rev_map.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX是二进制文件,因此不容易解析。有没有办法让git-svn通过特定命令输出以上信息?顺便说一句,我在 git 2.7.0

编辑: 我知道 git svn find-rev,但这只会让我找出 的 SHA-1 提交散列单一修订 并且我必须提供特定的 SVN 修订。不过,我想要得到的是 所有修订 的映射。最好不要强制我通过或使用外部数据源(即 SVN 存储库)来提供 SVN 修订作为输入。最好不要提供任何信息,因为此信息在 git-svn 构建其修订映射后存储在存储库中 - 或者不是吗?

获取所有哈希(或修订)的列表并在循环中使用git svn find-rev XXX

When given an SVN revision number of the form rN, returns the corresponding Git commit hash (this can optionally be followed by a tree-ish to specify which branch should be searched). When given a tree-ish, returns the corresponding SVN revision number.

如果您检查 git-svn 的内部结构,可能会有更好的方法,但如果没有更方便的方法,您可以在日志消息中以

的形式进行映射
git-svn-id: http://svn.host/path/trunk@<SVN_REVISION> <SVN_REPO_GUID>

所以您可能会浏览您感兴趣的修订并从日志的最后一行解析映射。

获取所有 SVN 修订版:

git config --add svn-remote.<Remote>.url <SVN URL>
git config --add svn-remote.<Remote>.fetch :refs/remotes/<Remote Name>
git svn fetch <Remote>

地图修订号 <=> git SHA-1:

git checkout remotes/<Remote Name>
git svn log --show-commit --oneline

输出:

r50 | 77c9acf | "SVN Commit message"
...
r1 | 84e6c49 | "SVN Commit message"