[英]Built-in command to checkout a specific Subversion revision which doesn't use the 'rNNNNN' format from a Git mirror?
我是从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
更新:与可能的重复项有关。 git svn find-rev
在Checkout中引用了与旧SVN信息库中的某个修订相对应的git commit? 适用于使用修订号为rN
样式的存储库,并非适用于所有SVN存储库,这一点也适用。 使用它会导致错误消息与以下类似。
fatal: Not a valid object name 95059
cat-file commit 95059: command returned error: 128
如果您的本地存储库由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
我希望您在本地Git镜像上仍然有一个svn-remote分支。 有了它,应该非常简单。 尝试这个。
git svn fetch <svn-remote>
git checkout remotes/<Remote Name>
git svn log --show-commit --oneline
从这里参考我的答案。
遵循我如何在git log中显示SVN版本号的答案? ,我的解决方案是使用grep
作为修订版ID,以cut
Git commit哈希。
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
来缩短哈希值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.