0

我想通过知道svn版本号来签出特定的签入。例如,当我使用 将 subversion 存储库克隆到本地 gitgit-svn clone时,我收到以下消息:

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我本地克隆上的旧版本的存储库。例如,要执行以下操作:gitsvn

git checkout r5129

并在我的本地克隆中获取svn发布的代码。r5129git

我的问题是,即使我看到标签的位置很好,我也不知道该怎么做。例如,当我执行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

那么,如何轻松地完成这样的功能(如果可能的话,在初始克隆时无需额外操作)?

4

2 回答 2

1

首先,我要感谢Matthijs P,他的评论带领我找到了解决方案。

git-svnfind-rev有一个允许链接git哈希标签和svn修订标签的子命令(有关更多信息,请参见git-svn 手册页)。所以,基本上,从远程检查一个特定的修订svn是这样完成的:

git checkout `git svn find-rev r5127`

请注意,因为您不会在分支上,所以如果您执行修改,将很难合并(除非您先对其进行变基)。

就我而言,这只是一个只读访问,所以这对我来说很好。

于 2013-09-15T15:04:56.507 回答
1

如果您不喜欢 的解决方案git svn find-rev,您可以尝试:

git checkout ':/@5127 '

如果给 git 一个以修订开头的字符串:/,它将使用最近的提交,其中日志消息与以下正则表达式匹配。由于 git-svn 通常会在日志消息中包含修订信息,因此此搜索也适用于此。注意结束引号之前的空格,如果您在 svn 历史记录中有那么多修订,这将阻止匹配 51271 之类的修订;如果您知道您要查找的修订版是最新的,不会出现该问题,您可以完全省略引号。

于 2013-09-15T15:29:11.120 回答