Git 方法级别的差异
Git Diff at method level
我正在查看有关任意两次提交
之间所有methods/function添加、删除和修改的信息
备注-
代码库位于 Java 和 Github
最终目标-我必须能够在跨越任何两个提交之间获得所有已删除、已修改(包括源代码修改和方法重命名)和新添加的方法
子包和 classes
完整的方法签名更开心
与 fully qualified method name
一起 return
我试过的东西
git Diff
- Link - 但 Diff 历史非常长,我真的只对添加、删除或修改的方法的变化感兴趣(即 Java 列出 class 但不是函数)
git log -L :function:path/to/file
- 打印该函数的更改历史记录,不做我打算做的事情,观察者在特定函数上而不是整个 git 回购.另一个限制是在两次提交之间获取差异。
期望的结果
任何两个提交之间的差异应该return
Methods Added ->
myMethod12 - path/to/class
myMethod34 - path/to/class
Methods Deleted ->
myMethod3 - path/to/class
myMethod11 - path/to/class
Methods Renamed ->
(Previous Name) (Revised Name) (Path)
myMethod6 yourMethod32 path/to/class
Methods Modified (source code modifs) ->
myMethod44 - path/to/class
或者理想情况下完全限定的方法名称
即
Methods Added ->
com.example.subp.subp2.nestedpack.addMessages(Message[] msgs)
...
First of all, git works with text and isn't responsible for indexing
your sources, searching for methods definitions, etc.
因此,最好的解决方案可能是 diff。 Here 描述了如何在特定提交之间使用差异。
我个人鼓励您对特定文件使用 diff:git diff specific-file
如果 diff 很大则使用 grep
:
git diff | grep -e method-name -e public -e private -e void -e etc
希望你能发明出更适合你目标的命令。祝你好运!
Git是通用工具。它不理解您的源语言(在本例中为 Java,但如果您的源语言是 Swift 或 Python 或 C++ 或 TypeScript,或者您能想到的任何其他语言怎么办?)。它只理解 "lines of text" 并具有简单(或有时,不是很简单)的正则表达式来识别函数/方法/class/其他此类定义,以注释差异。1
要获得您想要的输出类型,您需要一个能够理解相关语言的工具。
有这样的工具,你就给它:
- 旧版本(提交或来自该提交的文件),以及
- 较新的版本(另一个提交,或来自该提交的 "the same" 文件)。
然后它应该读取这两个提交的文件,弄清楚你有什么方法,并产生你喜欢的任何分析。
此工具需要 Git 的是两个 版本。它何时以及是否可以只处理两个 文件,或需要两个完整的快照,取决于该工具。
git difftool
命令可能对调用此其他工具有帮助,也可能没有帮助。 git difftool
所做的是比较两个完整的提交,然后,对于每个不同的文件,将这些文件的旧版本和新版本提供给另一个工具。您可以从您计算机上任何地方的任何工具中选择第二个工具。 Git 仅在从一对提交中提取的一对文件上调用该工具。如果这满足了您的需要,那么您现在就完成了。如果没有,您可能需要更多步骤:例如,您可能想要 运行 git diff --raw <commit1> <commit2>
并解析其输出,或者只是 git checkout
将两个提交中的每一个都提交到一些临时位置(使用每个临时索引)并从那里开始工作。
1请注意,正则表达式无法正确解析;大多数真实的语言都需要语法。参见,例如 Regular Expression Vs. String Parsing. A proper CS-theoretic discussion will get into Finite State Automata,但在 Whosebug 上通常与主题无关。
我不知道有什么工具可以做到这一点。
为了做类似的事情,你需要一个 Java-aware diff 工具。 difftastic supports Java. You get output like this (diff on some random BSD-3 licensed code):
我正在查看有关任意两次提交
之间所有methods/function添加、删除和修改的信息备注-
代码库位于 Java 和 Github
最终目标-我必须能够在跨越任何两个提交之间获得所有已删除、已修改(包括源代码修改和方法重命名)和新添加的方法 子包和 classes
完整的方法签名更开心 与 fully qualified method name
一起 return
我试过的东西
git Diff
- Link - 但 Diff 历史非常长,我真的只对添加、删除或修改的方法的变化感兴趣(即 Java 列出 class 但不是函数)git log -L :function:path/to/file
- 打印该函数的更改历史记录,不做我打算做的事情,观察者在特定函数上而不是整个 git 回购.另一个限制是在两次提交之间获取差异。
期望的结果
任何两个提交之间的差异应该return
Methods Added ->
myMethod12 - path/to/class
myMethod34 - path/to/class
Methods Deleted ->
myMethod3 - path/to/class
myMethod11 - path/to/class
Methods Renamed ->
(Previous Name) (Revised Name) (Path)
myMethod6 yourMethod32 path/to/class
Methods Modified (source code modifs) ->
myMethod44 - path/to/class
或者理想情况下完全限定的方法名称
即
Methods Added ->
com.example.subp.subp2.nestedpack.addMessages(Message[] msgs)
...
First of all, git works with text and isn't responsible for indexing your sources, searching for methods definitions, etc.
因此,最好的解决方案可能是 diff。 Here 描述了如何在特定提交之间使用差异。
我个人鼓励您对特定文件使用 diff:git diff specific-file
如果 diff 很大则使用 grep
:
git diff | grep -e method-name -e public -e private -e void -e etc
希望你能发明出更适合你目标的命令。祝你好运!
Git是通用工具。它不理解您的源语言(在本例中为 Java,但如果您的源语言是 Swift 或 Python 或 C++ 或 TypeScript,或者您能想到的任何其他语言怎么办?)。它只理解 "lines of text" 并具有简单(或有时,不是很简单)的正则表达式来识别函数/方法/class/其他此类定义,以注释差异。1
要获得您想要的输出类型,您需要一个能够理解相关语言的工具。
有这样的工具,你就给它:
- 旧版本(提交或来自该提交的文件),以及
- 较新的版本(另一个提交,或来自该提交的 "the same" 文件)。
然后它应该读取这两个提交的文件,弄清楚你有什么方法,并产生你喜欢的任何分析。
此工具需要 Git 的是两个 版本。它何时以及是否可以只处理两个 文件,或需要两个完整的快照,取决于该工具。
git difftool
命令可能对调用此其他工具有帮助,也可能没有帮助。 git difftool
所做的是比较两个完整的提交,然后,对于每个不同的文件,将这些文件的旧版本和新版本提供给另一个工具。您可以从您计算机上任何地方的任何工具中选择第二个工具。 Git 仅在从一对提交中提取的一对文件上调用该工具。如果这满足了您的需要,那么您现在就完成了。如果没有,您可能需要更多步骤:例如,您可能想要 运行 git diff --raw <commit1> <commit2>
并解析其输出,或者只是 git checkout
将两个提交中的每一个都提交到一些临时位置(使用每个临时索引)并从那里开始工作。
1请注意,正则表达式无法正确解析;大多数真实的语言都需要语法。参见,例如 Regular Expression Vs. String Parsing. A proper CS-theoretic discussion will get into Finite State Automata,但在 Whosebug 上通常与主题无关。
我不知道有什么工具可以做到这一点。
为了做类似的事情,你需要一个 Java-aware diff 工具。 difftastic supports Java. You get output like this (diff on some random BSD-3 licensed code):