内置命令来检查特定的Subversion修订版,该修订版没有使用             Git镜像的格式?

时间:2015-03-07 08:45:50

标签: git svn reference commit git-checkout

我正在从Subversion存储库的本地Git镜像编译,我需要从镜像中检出Subversion修订版号中的特定提交。

git log显示如下内容:通过找到git-svn-id: xxxx xxxx@revision-number行,应该可以找到正确的引用并将其检出。但是有很多修改,如果我想回到过去,它肯定会变得尴尬。是否有内置功能来实现这一目标?

commit xxxx-yyyy-fb12992fabd6a1165697ded73851d26993
Author: mattias <mattias@4005530d-fff6-0310-9dd1-cebe43e6787f>
Date:   Fri Mar 6 16:25:06 2015 +0000

    fpcunit: guitestrunner: scroll to first error after run, patch from Graeme, issue 27613

    git-svn-id: http://svn.freepascal.org/svn/lazarus/trunk@48152 4005530d-fff6-0310-9dd1-cebe43e6787f

更新:与可能的重复相关。 Checkout the git commit corresponding to a certain revision from the old SVN repository?中引用的git svn find-rev适用于使用rN样式的修订号的存储库,并非所有SVN存储库都是这种情况,也是这种情况。使用它会产生类似于下面的错误消息。

fatal: Not a valid object name 95059
cat-file commit 95059: command returned error: 128

3 个答案:

答案 0 :(得分:1)

如果您使用git svn管理本地存储库,则可以使用git svn find-rev

   find-rev
       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 find-rev r48152

答案 1 :(得分:1)

我希望你的本地Git镜像上还有一个svn-remote分支。 有了这个,它应该很简单。试试这个。

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

请参阅here的答案。

答案 2 :(得分:0)

根据How do I show the SVN revision number in git log?的回答,我的解决方案是grep,修订版ID为cut Git提交哈希。

git log -z | tr '\n\0' ' \n' | sed 's/\(commit \S*\) .*git-svn-id: \  
svn:[^@]*@\([0-9]*\) .*/\1 r\2/' | grep trunk@NNNNN | cut -d " " -f 2

如果NNNNN字符串出现在另一个不是提交ID的提交消息中,则trunk最小化匹配NNNNN字符串的机会。可以通过将输出通过另一个cut -b 1-8

来缩短哈希值