【问题标题】:Extract authorship information from git repository从 git 存储库中提取作者信息
【发布时间】:2012-06-06 21:45:09
【问题描述】:

我正在尝试从 git 存储库中提取(源代码行,作者标签)对。最简单的方法是使用 git blame。问题是 git blame 将最后一个提交者作为作者,无论提交者只是缩进代码还是真正更改代码。你知道有什么更好的方法吗?

或者也许在尝试解决问题之前,我应该首先检查有多少源代码行与多个作者相关联。如果百分比很小,则无需担心。但我发现即使是数数也很困难。对于具有单亲的提交,我们如何知道提交更改了一行而不是删除了一行并添加了一行?对于有两个父母的提交(如合并),我应该如何结合两个分支的差异结果?

谢谢

【问题讨论】:

    标签: git repository author


    【解决方案1】:

    概述

    这是对 Git 工作原理的根本误解。 Git 不提交补丁或差异;它会提交树和 blob,尽管packfiles 肯定会进行某种分类。大多数提交历史记录是在运行时计算的,带有一些差异。

    换句话说,如果您的差异工具可以做您想做的事,那么 Git 也可以。

    混帐责备

    git-blame 命令不会做你想做的事,因为手册页说(强调我的):

    在给定文件中的每一行用上次修改该行的修订版的信息进行注释。

    换句话说,它是严格面向行的。

    git 日志

    你可以通过 git-log 接近你想要的。例如:

    # Show diffs with indifference to whitespace changes (e.g. indenting).
    git log --patch --ignore-space-change
    
    # Just ignore whitespace altogether.
    git log --patch --ignore-all-space
    
    # Show deletions with [- -] and additions with {+ +}.
    git log --patch --word-diff=plain
    
    # Custom diff format where ~ denotes newlines.
    git log --patch --word-diff=porcelain
    

    瓷器格式用于文本处理,但从视觉角度来看它非常不直观。但是,它在man 1 git-diff 中有详细记录,供您享受编程乐趣。

    缺点是您必须从与每个提交关联的 GIT_AUTHOR_NAME 或 GIT_COMMITTER_NAME 获取您的作者信息,而不是让 Git 为您装饰它。

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      相关资源
      最近更新 更多