如何在git log中显示SVN修订版号?

Zai*_*ain 31 git git-svn

我正在将我的git日志定制为1行.具体来说,我添加了以下别名:

lg = log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%an%Creset - %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
Run Code Online (Sandbox Code Playgroud)

所以,当我跑步时git lg,我看到以下内容:

* 41a49ad - zain - commit 1 message here (3 hours ago)
* 6087812 - zain - commit 2 message here (5 hours ago)
* 74842dd - zain - commit 3 message here (6 hours ago)
Run Code Online (Sandbox Code Playgroud)

但是,我想在那里添加SVN修订号,所以它看起来像:

* 41a49ad - r1593 - zain - commit 1 message here (3 hours ago)
Run Code Online (Sandbox Code Playgroud)

正常git log显示SVN版本号,所以我确信这一定是可行的.我该怎么做呢?

Von*_*onC 30

考虑一下命令 git svn

  • 它具有与以下类似的日志功能git log:git svn log
  • 它有find-rev选项(从SHA1密钥检索SVN修订版)(在git 1.6.0中引入)

我不确定您是否可以在一个命令行中组合这两个选项.
一个脚本(有点像这个不是你想要的但仍然可以提供一些想法的脚本)可能是有序的.


sdaau 在评论中添加:

一个例子:

git svn find-rev $(git log --max-count 1 --pretty=format:%H)
Run Code Online (Sandbox Code Playgroud)

  • 例如:`git svn find-rev $(git log --max-count 1 --pretty = format:%H)` (2认同)

kak*_*kyo 14

跑:

git rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)

它给你git commit hash.

然后使用该提交哈希运行:

git svn find-rev <commit_hash>
Run Code Online (Sandbox Code Playgroud)

这给你svn修订版.

  • 当你提交答案时(或者我有特殊的git/svn版本),这可能不是这样,但对我而言,它也可以简单地编写`git svn find-rev HEAD`. (8认同)
  • 这仅适用于您没有任何本地提交但尚未推送到SVN的情况.否则它会变回空白! (3认同)

Unc*_*eiv 9

当你说"正常git log显示你的SVN版本号"时,我猜你的意思是你正在处理一个处理的存储库git svn,默认情况下在同步提交结束时添加这样一行:

git-svn-id: svn://path/to/repository@###### <domain>
Run Code Online (Sandbox Code Playgroud)

现在,就git而言,这只是随机文本,所以我怀疑你可以找到一个%访问器来######从那里读取修订版号.

此时,您最好的选择就是git log自己解析plain的输出.这是一个粗略的起点:

git log -z | tr '\n\0' ' \n' | sed 's/\(commit \S*\) .*git-svn-id: svn:[^@]*@\([0-9]*\) .*/\1 r\2/'
Run Code Online (Sandbox Code Playgroud)


小智 8

结束了这样的事情:

git svn log --oneline -1 | cut -d '|' -f1
Run Code Online (Sandbox Code Playgroud)

这给了那个repo的最后一个修订版(你可以调整git svn log参数以显示另一个修订版,但保留--oneline-1),但是"r9441 "我认为应该很容易剥离的尾随空格(类似的东西).

希望能帮助到你...