我正在尝试从 git 存储库中提取(源代码行,作者标签)对。最简单的方法是使用 git Blame。问题是 gitblame 将最后一个提交者视为作者,无论提交者只是缩进代码还是真正更改了代码。你知道有什么更好的方法吗?
或者也许在尝试解决问题之前,我应该首先检查有多少源代码行与多个作者相关联。如果比例很小,则无需担心。但我发现连数数都困难。对于具有单父项的提交,我们如何知道该提交更改了一行而不是删除了一行并添加了一行?对于具有两个父级的提交(例如合并),我应该如何组合两个分支的差异结果?
Thanks
Overview
这是对 Git 工作原理的根本误解。 Git 不提交补丁或差异;它提交了树和斑点,尽管包文件 http://git-scm.com/book/en/Git-Internals-Packfiles当然会进行某种程度的增量化。大部分提交历史记录是计算出的在运行时带有一些 diff 的味道。
换句话说,如果您的 diff 工具可以满足您的要求,那么 Git 也可以。
git 责备
git-blame 命令不会执行您想要的操作,因为手册页显示(强调我的):
注释每行在给定文件中,包含最后修改该行的修订版本的信息。
换句话说,它是严格面向行的。
git-log
您可以使用 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 为您装饰它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)