我正在使用 Subgit 访问 Subversion 存储库。它工作得很好,但有时,尤其是在与使用普通 Subversion 客户端访问 repo 的用户通信时,我真的很想找到特定变更集对应的 SVN 修订版。
我可以git
在本地仓库中的某处使用查找 SVN 修订号吗?
是的,您可以轻松做到这一点。您应该只修改.git/config
克隆的 Git 存储库中的文件以添加
[remote "origin"]
...
fetch = +refs/svn/map:refs/notes/commits
选项然后运行,如SubGit bookgit fetch
的“推荐的客户端 Git 配置”部分所述。在克隆存储库上的该命令之后将显示修订号。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 分支”的分支名称),要获取 SHA-1 并通过修订版本 REV 更改分支名称,您可以运行
$ git log --format="%H %N" --all | grep "r$REV "
同样,您可以在此处 grep SHA-1 或分支名称。