我正在从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
答案 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