【问题标题】:How do I show the SVN revision number in git log?如何在 git log 中显示 SVN 修订号?
【发布时间】:2019-09-30 21:03:49
【问题描述】:

我正在将我的 git 日志自定义为全部在 1 行中。具体来说,我添加了以下别名:

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

所以,当我运行 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)

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

* 41a49ad - r1593 - zain - commit 1 message here (3 hours ago)

普通的git log 会显示SVN 修订号,所以我确信这一定是可能的。我该怎么做呢?

【问题讨论】:

    标签: git git-svn


    【解决方案1】:

    考虑命令git svn

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

    我不确定你是否可以在一个命令行中组合这两个选项。
    一个脚本(有点像 this one 这不是你想要的,但仍然可以给出一些想法)可能是有序的。


    sdaau 添加in the comments

    一个例子:

    git svn find-rev $(git log --max-count 1 --pretty=format:%H)
    

    Adversus 添加in the comments

    注意find-rev在当前分支中搜索,所以如果你在masterrxyz发生在一个分支中,find-rev将找不到它。
    您可以提供-B(之前)或-A(之后)选项以进行更广泛的搜索,请参阅git svn find-rev man page section

    【讨论】:

    • 一个例子:git svn find-rev $(git log --max-count 1 --pretty=format:%H)
    • @sdaau 谢谢。我已将您的示例包含在答案中以提高知名度。
    • 那些指向邮件列表的链接已损坏。你能用更合适的链接替换它们吗?例如。网络档案web.archive.org/web/20070615164322/http://lists-archives.org/…
    • @RobW 不需要 web.archive.org ;) 我已经恢复了链接。
    • 如何将此命令的结果添加到 git log 中?我有别名lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit,如何插入SVN修订版?
    【解决方案2】:

    运行:

    git rev-parse HEAD
    

    这会给你 git commit hash。

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

    git svn find-rev <commit_hash>
    

    这会给你 svn 修订版。

    【讨论】:

    • 我最喜欢这个答案,因为它看起来最直接。这是我对单行版本的看法:echo "r$(git svn find-rev $(git rev-parse HEAD))"。这当然可以作为别名:rev = !echo "r$(git svn find-rev $(git rev-parse HEAD))"
    • 我最喜欢这个答案,因为它看起来最直接。这是我对单行版本的看法:echo "r$(git svn find-rev $(git rev-parse HEAD))"。这当然可以用作别名:svnrev = !echo "r$(git svn find-rev $(git rev-parse HEAD))"。这也使得你可以更好地模仿 svn export export = !git archive --format zip --output /tmp/$(git svnrev) master
    • git svn find-rev 也可以反过来工作,只需指定前缀为 r 的 SVN 修订号:git svn find-rev r63919
    • 也许当你提交答案时这不是真的(或者我有特殊的 git/svn 版本),但对我来说它也可以简单地写git svn find-rev HEAD
    • 这仅在您没有任何未推送到 SVN 的本地提交时才有效。否则它将返回空白!
    【解决方案3】:

    当您说“普通的git log 向您显示SVN 修订号”时,我猜您的意思是您正在处理由git svn 处理的存储库,默认情况下会在末尾添加这样一行同步提交:

    git-svn-id: svn://path/to/repository@###### <domain>
    

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

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

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

    【讨论】:

    • VonC的解决方案要简单得多
    【解决方案4】:

    最后是这样的:

    git svn log --oneline -1 | cut -d '|' -f1
    

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

    希望对你有帮助...

    【讨论】:

    • 这不行,这行得通:git svn log --oneline --limit=1.
    猜你喜欢
    • 2010-09-05
    • 2014-07-02
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2017-11-25
    • 2011-10-01
    • 2023-01-10
    • 1970-01-01
    相关资源
    最近更新 更多