我想通过了解svn
版本号来结帐特定的办理登机手续。例如,当我使用git-svn clone
将subversion存储库克隆到本地git时,我收到以下消息:
r5119 = 1563c2dcb9f456d5ba1ba2c277bf7969c452d18b (refs/remotes/git-svn)
M check-svn.c
M Makefile
r5127 = 1b656753fe46287f52f29359793b2d8671137f4b (refs/remotes/git-svn)
M check-svn.c
r5129 = edd06d73d270769cc46db58d9a1a0a4683c95be1 (refs/remotes/git-svn)
M check-svn.c
r5132 = 39bf8333113f1ccc6b839cf944dd88c560509065 (refs/remotes/git-svn)
Checked out HEAD:
https://svn.myserver.net/check-svn r5132
因此,我们可以看到svn
版本标记已知(r5119
,r5127
,...)。
我想要做的是通过了解svn
版本号,回到本地git
克隆上的svn
存储库的旧版本。例如,要执行以下操作:
git checkout r5129
在我的本地svn
克隆中获取r5129
版本git
的代码。
我的问题是,即使我看到标签位置合适,我也看不到如何做到这一点。例如,当我执行git shortlog
时,如下所示:
git-svn-id: https://svn.myserver.net/check-svn@5119 bb18-a6e4ad0ded21
git-svn-id: https://svn.myserver.net/check-svn@5127 bb18-a6e4ad0ded21
git-svn-id: https://svn.myserver.net/check-svn@5129 bb18-a6e4ad0ded21
git-svn-id: https://svn.myserver.net/check-svn@5132 bb18-a6e4ad0ded21
那么,如何轻松地完成这样的功能(如果可能的话,在初始克隆时没有额外的操作)?
答案 0 :(得分:1)
首先,我要感谢Matthijs P带领我通过他的评论解决问题。
git-svn
有一个子命令find-rev
,可以链接git
哈希标记和svn
修订标签(请参阅git-svn
{{ 3}}更多)。因此,基本上,从远程svn
检出特定修订版是这样做的:
git checkout `git svn find-rev r5127`
要注意,因为你不会在分支上,所以如果你进行修改,就很难合并(除非你先修改它)。
在我的情况下,这只是一个只读访问权限,所以这对我来说没问题。
答案 1 :(得分:1)
如果您不喜欢git svn find-rev
的解决方案,可以尝试:
git checkout ':/@5127 '
如果给git一个以:/
开头的字符串作为修订版,它将使用最新的提交,其中日志消息与下面的正则表达式匹配。由于git-svn通常会在日志消息中包含修订信息,因此该搜索也适用于此。注意结束引号之前的空格,如果在svn历史记录中有那么多修订,那么将阻止匹配像51271那样的修订;如果你知道你正在寻找的修订版本是最近的,没有那个问题你可以完全忽略引号。