如何在 subgit repo 中找到 SVN 版本?

How to find SVN revision in subgit repo?

我正在使用 Subgit 访问 Subversion 存储库。它工作得很好,但有时,尤其是在与使用普通 Subversion 客户端访问 repo 的用户交流时,我真的很想找到特定变更集对应的 SVN 修订版。

我可以使用 git 在我的本地存储库中的某处找到 SVN 修订号吗?

是的,您可以轻松做到。您应该只修改克隆的 Git 存储库中的 .git/config 文件以添加

[remote "origin"]
...
fetch = +refs/svn/map:refs/notes/commits

选项,然后是 运行 git fetch,如 SubGit book 的 "Recommended client-side Git configuration" 部分所述。之后,克隆存储库上的 git log 命令将显示修订号。

如果您想在服务器端执行此操作(并且如果您不在项目中将 Git 注释用于其他目的),您可以 运行 在服务器计算机上

$ git update-ref refs/notes/commits refs/svn/map

用于一次性 Git 创建笔记,或者您可以 运行 在该存储库中

$ cd refs
$ mkdir notes
$ echo "refs: refs/svn/map" > notes/commits

使 refs/notes/commits 遵循由 SubGit 更新的 refs/svn/map 并存储最新修订版 <-> SHA-1 映射。之后服务器上的git log也会显示修订号。

如果你想在脚本中将修订转换为 SHA-1 哈希(在以上述任何方式设置 Git 注释后),你可以使用此命令

$ git log --format="%H %N" --all

结合行解析函数。例如。如果您不太关心极端情况(例如名称的分支名称 "r$REV branch"),要获取 SHA-1 并通过修订 REV 更改分支名称,您可以 运行

$ git log --format="%H %N" --all | grep "r$REV "

同样,您可以在此处 grep SHA-1 或分支名称。