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

时间:2016-02-18 12:44:55

标签: git svn logging git-svn

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 repo)来提供SVN修订作为输入。最优选的是,在没有提供任何内容的情况下,因为在git-svn构建了修订版之后,这些信息存储在存储库中 - 或者不是?

3 个答案:

答案 0 :(得分:5)

获取所有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>

地图修订号&lt; =&gt; git SHA-1:

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

输出:

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

答案 1 :(得分:1)

获取所有哈希值(或修订版)的列表,并在周期中使用git svn find-rev XXX

  

当给出形式为rN的SVN修订号时,返回   相应的Git提交哈希(这可以选择后跟一个   tree-ish指定应搜索哪个分支。当给出一个   tree-ish,返回相应的SVN修订号。

答案 2 :(得分:1)

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

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

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