7

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

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

4

1 回答 1

9

是的,您可以轻松做到这一点。您应该只修改.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 或分支名称。

于 2015-01-19T11:20:44.157 回答