git diff 大块头中的摘录来自哪里? [英] Where does the excerpt in the git diff hunk header come from?

查看:25
本文介绍了git diff 大块头中的摘录来自哪里?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我在 C# 文件上使用 git diff 时,我看到如下内容:

diff --git a/foo.cs b/foo.cs索引 ff61664..dd8a3e3 100644--- a/foo.cs+++ b/foo.cs@@ -15,6 +15,7 @@ static void Main(string[] args)字符串名称 = Console.ReadLine();}Console.WriteLine("你好 {0}!", name);+ Console.WriteLine("再见");}}}

大块头行包含当前方法的第一行(static void Main(string[] args)),很棒.但是它似乎不是很可靠......我看到很多情况下它不起作用.

所以我想知道,这段摘录来自哪里?git diff 是否以某种方式识别语言语法?有没有办法自定义?

解决方案

有没有办法自定义它?

配置定义在.gitattributes, sectionDefining自定义大块头:

<块引用>

首先,在 .gitattributes 中,您需要为路径分配 diff 属性.

*.tex diff=tex

然后,您将定义一个diff.tex.xfuncname";配置以指定与您希望显示为大块标题TEXT"的行匹配的正则表达式.将一个部分添加到您的 $GIT_DIR/config 文件(或 $HOME/.gitconfig 文件)中,如下所示:

[diff tex"]xfuncname = "^(\\(sub)*section\{.*)$";

注意.配置文件解析器会吃掉一层反斜杠,因此您需要将反斜杠加倍;上面的模式选择一行以反斜杠开头,零次或多次出现 sub 后跟 section 后跟左大括号,直到行尾.

有一些内置模式可以使这更容易,tex 就是其中之一,因此您不必在配置文件中编写上述内容(您仍然需要启用此与属性机制,通过.gitattributes).

('csharp' 是当前内置模式的一部分)




<块引用>

这段摘录来自哪里?
git diff 是否以某种方式识别语言语法?

最初,该算法对于函数名称检测非常粗糙:
请参阅 commit acb7257(Git 1.3.0,2006 年 4 月,作者:Mark Wood)/p>

xdiff:在大块头中显示函数名称.

<块引用>

内置差异生成器的速度不错;但是函数名diff -p 显示的真的很好.我讨厌不得不选择.
所以,我们破解 xdiff 来找到函数名并打印出来.

函数名由一个特别愚蠢的算法解析时刻:它只是尝试在旧"文件中找到一行,从之前大块头的开始,他的第一个角色看起来很有道理.还是这样绝对是一个开始.


它是通过 get_func_line() 改进的,它本身来自 commit f258475(Git 1.5.3,2007 年 9 月,作者:C Hamanohttps://github.com/gitster" rel="nofollow noreferrer">gitster))

您可以在提交测试中看到 t/t4018-diff-funcname.sh,测试自定义的差异函数名称模式.

基于每个路径属性的大块头选择.

<块引用>

这使得diff -p"通过 gitattributes 机制定制的大块头文件.
它基于 Johannes 的早期补丁,该补丁允许定义单个正则表达式用于一切.

到达用于定义hunk header的regexp的机制与 gitattributes 的其他用法相同.
您分配一个属性,funcname(因为diff -p"通常使用补丁所涉及的函数的名称作为大块头),一个简单的字符串值.
这可以是内置模式的名称之一(当前,java"已定义)或自定义模式名称,可从配置文件中查找.

(在 .gitattributes 中)*.java 函数名=java*.perl funcname=perl(在 .git/config 中)[函数名称]java = ... # 丑陋而复杂的正则表达式来覆盖内置的正则表达式.perl = ... # 另一个丑陋而复杂的正则表达式来定义一个新的正则表达式.


当前的 xfuncname 语法在 commit 45d9414 中引入>,Git 1.6.0.3,2008 年 10 月,作者:Brandon Casey

diff.*.xfuncname 使用扩展"用于大块头选择的正则表达式

<块引用>

目前,'diff -p' 生成的大块头文件可通过以下方式自定义在配置文件中设置 diff.*.funcname 选项.'funcname' 选项采用基本的正则表达式.此功能是使用 GNU 正则表达式库设计的,默认情况下,即使在基本正则表达式模式下,它也允许使用某些扩展正则表达式运算符的反斜杠版本.例如,以下字符在使用反斜杠时会根据扩展的正则表达式规则进行解释:?+|.
因此,内置的 funcname 模式是使用一些扩展的正则表达式运算符.

其他更严格遵守 POSIX 规范的平台没有解释基本正则表达式中的反斜杠扩展 RE 运算符模式.这会导致内置 funcname 模式的模式匹配在这些平台上失败.

引入一个使用扩展正则表达式的新选项xfuncname",并宣传它而不是funcname.
由于大多数用户都在 GNU 平台上,因此大多数 funcname 模式都是在那里创建和测试的.
仅宣传 xfuncname 应该有助于避免创建非便携式模式,这些模式适用于 GNU 正则表达式,但不适用于其他地方.

另外,扩展的正则表达式可能不那么难看与基本 RE 相比复杂,因为许多常见的特殊运算符不需要反斜杠.

例如,GNU Basic RE:

^[ ]*\(\(public\|static\).*\)$

成为以下扩展 RE:

^[ ]*((public|static).*)$


最后,它已经扩展为 commit 14937c2,for .(2011 年 12 月),作者:René Scharfe.

diff:添加选项以将整个函数显示为上下文

<块引用>

将选项 -W/--function-context 添加到 git diff.
它类似于 git grep 和扩展了变化块的上下文,以便显示整个周围的功能.
这种自然"上下文可以让人们更好地理解变化.


它仍在 Git 2.15(2017 年第四季度)中进行调整

<块引用>

检测函数头"的内置模式对于 HTML 做了不匹配没有任何属性的

..
元素,它有已修复.

在 2.15 之前,它无法匹配

...

,而

...<;/h1> 匹配.

请参阅 commit 9c03cac(2017 年 9 月 23 日 https)伊利亚坎特 (iliakan).
(由 Junio C Hamano 合并 -- gitster --commit 376a1da,2017 年 9 月 28 日)


检测函数边界的模式称为xfuncref.

请参阅 commit a807200(2019 年 11 月 8 日https)由 Łukasz Niemier (hauleth).
(由 Junio C Hamano 合并 -- gitster --commit 376e730,2019 年 12 月 1 日),对于 2019 年 12 月 1 日),25 (2019 年 12 月 1 日)/p><块引用>

userdiff:将 Elixir 添加到支持的用户差异语言

签字人:Łukasz Niemier
确认:Johannes Sixt

<块引用>

Elixir 语言中添加对 xfuncref 的支持,该语言是类似 Ruby 的语言在 Erlang 虚拟机 (BEAM) 上运行.

还有:

请参阅 commit d1b1384(2019 年 12 月 13 日)https://Ed Maste (emaste).
(由 Junio C Hamano 合并 -- gitster --commit ba6b662,2019 年 12 月 25 日)

<块引用>

userdiff:从elixir 正则表达式

签字人:Ed Maste
审核人:Jeff King
帮助:Johannes Sixt

<块引用>

正则表达式在 FreeBSD 上编译失败.

还要添加 /* -- */ 标记来分隔给 PATTERNS() 宏的两个正则表达式条目,使其与其他内容类型的模式一致.


Git 2.27(2020 年第 2 季度)中添加了 Markdown 文档的 userdiff 模式.

参见 commit 09dad92(2020 年 5 月 2 日)Ash Holland (sersorrel).
(由 Junio C Hamano 合并 -- gitster --提交 dc4c393,2020 年 5 月 8 日)

<块引用>

userdiff:支持降价

签字人:Ash Holland
确认:Johannes Sixt

<块引用>

通常可以在源代码旁边找到 Markdown 文档,并且为文档更改提供更好的上下文很有用;另请参见 commit 69f9c87d4(a> 列在 batch #1 中).

<块引用>

该模式基于 CommonMark 规范 0.29,第 4.2 节 https://spec.commonmark.org/ 但不匹配空标题,因为在大块标题中看到它们不太可能有用.

仅支持 ATX 标题,因为检测 setext 标题需要在模式匹配或匹配多行模式之前打印行.word-diff 模式与 HTML 模式相同,因为许多 Markdown 解析器都接受内联 HTML.


在 Git 2.30(2021 年第一季度)中,userdiff 模式学会了识别 POSIX shell 和 bash 中的函数定义.

请参阅 commit 2ff6c34(2020 年 10 月 22 日 https)维克多·恩马克 (l0b0).
(由 Junio C Hamano 合并 -- gitster --commit 292e53f,2020 年 11 月 2 日)

<块引用>

userdiff:支持 Bash

签字人:Victor Engmark
确认:Johannes Sixt

<块引用>

支持 POSIX、bashism 和混合函数声明、所有四种复合命令类型、尾随注释和混合空格.

即使 Bash 允许函数名称中的语言环境相关字符,也只能检测具有<允许的字符的函数名称a href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_235" rel="nofollow noreferrer">POSIX.1-2017 为简单起见.
这应该涵盖绝大多数用例,并产生与系统无关的结果.

由于必须指定字型,但没有简单的方法可以知道默认字型,因此请使用默认的 IFS 字符作为起始符.以后的补丁可以改善这一点.

gitattributes 现在包含在其 手册页:

<块引用>
  • bash 适用于 Bourne-Again SHell 语言的源代码.
    涵盖 POSIX shell 函数定义的超集.


在 Git 2.32(2021 年第二季度)中,方案"的用户差异模式已添加.

参见 commit a437390(2021 年 4 月 8 日)Atharva Raykar (tfidfwastaken).
(由 Junio C Hamano 合并 -- gitster --commit 6d7a62d,2021 年 4 月 20 日>

userdiff:添加对 Scheme 的支持H2>

签字人:Atharva Raykar

<块引用>

为类似 Scheme 的语言添加一个 diff 驱动程序,它识别顶级和本地 define 形式,无论是函数定义、绑定、语法定义还是用户定义的 define-xyzzy 表单.

还支持 R6RS library 形式、module 形式以及 Racket (PLT Scheme) 中使用的类和结构声明.

替代def"也支持Gerbil Scheme中的语法,如defstruct、defsyntax等.

为大块头选择define形式的基本原理是因为它通常是定义程序结​​构的唯一重要形式,并且具有局部函数定义是设计者的常见模式隐藏它们的可见性,因此感兴趣的不仅仅是顶级define.
Schemers 还使用宏扩展了语言,以提供他们自己的定义形式(例如,类似 define-test-suite 之类的东西),它也在大块头中捕获.

由于使用诸如 module+class* 等形式的变体来扩展语法是一种常见做法,因此也支持这些变体.

正则表达式这个词是为了符合 R7RS(部分2.1) 有效的标识符、符号和数字.

gitattributes 现在包含在其 手册页:

<块引用>
  • scheme 适用于 Scheme 语言的源代码.


在 Git 2.33(2021 年第 3 季度)中,C# 的 userdiff 模式学习了令牌record".

参见 commit c4e3178(2021 年 3 月 2 日),作者 Julian Verdurmen (304NotModified).
(由 Junio C Hamano 合并 -- gitster --commit f741069,2021 年 7 月 8 日)

<块引用>

userdiff:添加对 C# 记录类型的支持

签字人:Julian Verdurmen
审核人:约翰内斯·辛德林

<块引用>

C# 9 中添加了记录

代码示例:

public record Person(string FirstName, string LastName);

有关详细信息,请参阅 https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9


在 Git 2.34(2021 年第 4 季度)中,java"的 userdiff 模式开始使用.语言已更新.

参见 commit a8cbc89(2021 年 8 月 11 日 Tassilo Horn (tsdh).
(由 Junio C Hamano 合并 -- gitster --commit a896086,2021 年 8 月 30 日)

<块引用>

userdiff:改进java大块头正则表达式

签字人:Tassilo Horn

<块引用>

目前,git diff(man) 大块头显示如果方法具有限定返回类型、数组返回类型或泛型返回类型,则方法签名错误,因为正则表达式不允许使用点 (.), [],或者返回类型中的 <>.
此外,无法匹配类型参数声明.

添加几个 t4018 测试,为不同的情况断言正确的大块头:

  • 枚举常量变化
  • 更改具有有界类型参数的泛型方法
  • 使用通配符更改通用方法
  • 嵌套类中的字段更改

而且,在 Git 2.34(2021 年第四季度)中,C++ 语言的用户差异模式已经更新.

参见 commit 386076e(2021 年 10 月 24 日),commit c4fdba3, 提交 637b80c9commit bfaf102021 年 10 月)和 commit 350b87ccommit 3e063de, commit 1cf9384(2021 年 10 月 8 日) Johannes Sixt (j6t).
(由 Junio C Hamano 合并 -- gitster --commit f3f157f,2021 年 10 月 25 日)

例如:

<块引用>

userdiff-cpp:允许数字-用数字分隔单引号

签字人:Johannes Sixt

<块引用>

从 C++17 开始,单引号可以用作数字分隔符:

3.141'592'6541'000'0000xdead'beaf

让 cpp 驱动程序的 regex 这个词知道它,这样数字就不会在单引号处分成单独的标记.

When I use git diff on a C# file, I see something like this:

diff --git a/foo.cs b/foo.cs
index ff61664..dd8a3e3 100644
--- a/foo.cs
+++ b/foo.cs
@@ -15,6 +15,7 @@ static void Main(string[] args)
                    string name = Console.ReadLine();
             }
             Console.WriteLine("Hello {0}!", name);
+            Console.WriteLine("Goodbye");
         }
     }
 }

The hunk header line contains the first line of the current method (static void Main(string[] args)), which is great. However it doesn't seem to be very reliable... I see many cases where it doesn't work.

So I was wondering, where does this excerpt come from? Does git diff somehow recognize the language syntax? Is there a way to customize it?

解决方案

Is there a way to customize it?

The configuration is defined in .gitattributes, section "Defining a custom hunk-header":

First, in .gitattributes, you would assign the diff attribute for paths.

*.tex diff=tex

Then, you would define a "diff.tex.xfuncname" configuration to specify a regular expression that matches a line that you would want to appear as the hunk header "TEXT". Add a section to your $GIT_DIR/config file (or $HOME/.gitconfig file) like this:

[diff "tex"]
   xfuncname = "^(\\(sub)*section\{.*)$"

Note. A single level of backslashes are eaten by the configuration file parser, so you would need to double the backslashes; the pattern above picks a line that begins with a backslash, and zero or more occurrences of sub followed by section followed by open brace, to the end of line.

There are a few built-in patterns to make this easier, and tex is one of them, so you do not have to write the above in your configuration file (you still need to enable this with the attribute mechanism, via .gitattributes).

('csharp' is part of the current built-in patterns)




Where does this excerpt come from?
Does git diff somehow recognize the language syntax?

Initially, the algorithm was quite crude for function name detection :
See commit acb7257 (Git 1.3.0, April 2006, authored by Mark Wooding)

xdiff: Show function names in hunk headers.

The speed of the built-in diff generator is nice; but the function names shown by diff -p are really nice. And I hate having to choose.
So, we hack xdiff to find the function names and print them.

The function names are parsed by a particularly stupid algorithm at the moment: it just tries to find a line in the 'old' file, from before the start of the hunk, whose first character looks plausible. Still, it's most definitely a start.


It was refined with get_func_line(), itself coming from commit f258475 (Git 1.5.3, Sept 2007, authored by Junio C Hamano (gitster))

You can see in that commit the test t/t4018-diff-funcname.sh, to Test custom diff function name patterns.

Per-path attribute based hunk header selection.

This makes "diff -p" hunk headers customizable via gitattributes mechanism.
It is based on Johannes's earlier patch that allowed to define a single regexp to be used for everything.

The mechanism to arrive at the regexp that is used to define hunk header is the same as other use of gitattributes.
You assign an attribute, funcname (because "diff -p" typically uses the name of the function the patch is about as the hunk header), a simple string value.
This can be one of the names of built-in pattern (currently, java" is defined) or a custom pattern name, to be looked up from the configuration file.

 (in .gitattributes)
 *.java   funcname=java
 *.perl   funcname=perl

 (in .git/config)
 [funcname]
   java = ... # ugly and complicated regexp to override the built-in one.
   perl = ... # another ugly and complicated regexp to define a new one.


The current xfuncname syntax is introduced in commit 45d9414, Git 1.6.0.3, Oct. 2008, authored by Brandon Casey

diff.*.xfuncname which uses "extended" regex's for hunk header selection

Currently, the hunk headers produced by 'diff -p' are customizable by setting the diff.*.funcname option in the config file. The 'funcname' option takes a basic regular expression. This functionality was designed using the GNU regex library which, by default, allows using backslashed versions of some extended regular expression operators, even in Basic Regular Expression mode. For example, the following characters, when backslashed, are interpreted according to the extended regular expression rules: ?, +, and |.
As such, the builtin funcname patterns were created using some extended regular expression operators.

Other platforms which adhere more strictly to the POSIX spec do not interpret the backslashed extended RE operators in Basic Regular Expression mode. This causes the pattern matching for the builtin funcname patterns to fail on those platforms.

Introduce a new option 'xfuncname' which uses extended regular expressions, and advertise it instead of funcname.
Since most users are on GNU platforms, the majority of funcname patterns are created and tested there.
Advertising only xfuncname should help to avoid the creation of non-portable patterns which work with GNU regex but not elsewhere.

Additionally, the extended regular expressions may be less ugly and complicated compared to the basic RE since many common special operators do not need to be backslashed.

For example, the GNU Basic RE:

^[    ]*\(\(public\|static\).*\)$

becomes the following Extended RE:

^[    ]*((public|static).*)$


Finally, It has been expanded with commit 14937c2, for git 1.7.8 (December 2011), authored by René Scharfe.

diff: add option to show whole functions as context

Add the option -W/--function-context to git diff.
It is similar to the same option of git grep and expands the context of change hunks so that the whole surrounding function is shown.
This "natural" context can allow changes to be understood better.


It is still being tweaked in Git 2.15 (Q4 2017)

The built-in pattern to detect the "function header" for HTML did not match <H1>..<H6> elements without any attributes, which has been fixed.

Before 2.15, it was failing to match <h1>...</h1>, while <h1 class="smth">...</h1> matches.

See commit 9c03cac (23 Sep 2017) by Ilya Kantor (iliakan).
(Merged by Junio C Hamano -- gitster -- in commit 376a1da, 28 Sep 2017)


A pattern to detect function boundary is called a xfuncref.

See commit a807200 (08 Nov 2019) by Łukasz Niemier (hauleth).
(Merged by Junio C Hamano -- gitster -- in commit 376e730, 01 Dec 2019), for Git 2.25 (Q1 2020)

userdiff: add Elixir to supported userdiff languages

Signed-off-by: Łukasz Niemier
Acked-by: Johannes Sixt

Adds support for xfuncref in Elixir language which is Ruby-like language that runs on Erlang Virtual Machine (BEAM).

And:

See commit d1b1384 (13 Dec 2019) by Ed Maste (emaste).
(Merged by Junio C Hamano -- gitster -- in commit ba6b662, 25 Dec 2019)

userdiff: remove empty subexpression from elixir regex

Signed-off-by: Ed Maste
Reviewed-by: Jeff King
Helped-by: Johannes Sixt

The regex failed to compile on FreeBSD.

Also add /* -- */ mark to separate the two regex entries given to the PATTERNS() macro, to make it consistent with patterns for other content types.


The userdiff patterns for Markdown documents have been added with Git 2.27 (Q2 2020).

See commit 09dad92 (02 May 2020) by Ash Holland (sersorrel).
(Merged by Junio C Hamano -- gitster -- in commit dc4c393, 08 May 2020)

userdiff: support Markdown

Signed-off-by: Ash Holland
Acked-by: Johannes Sixt

It's typical to find Markdown documentation alongside source code, and having better context for documentation changes is useful; see also commit 69f9c87d4 ("userdiff: add support for Fountain documents", 2015-07-21, Git v2.6.0-rc0 -- merge listed in batch #1).

The pattern is based on the CommonMark specification 0.29, section 4.2 https://spec.commonmark.org/ but doesn't match empty headings, as seeing them in a hunk header is unlikely to be useful.

Only ATX headings are supported, as detecting setext headings would require printing the line before a pattern matches, or matching a multiline pattern. The word-diff pattern is the same as the pattern for HTML, because many Markdown parsers accept inline HTML.


With Git 2.30 (Q1 2021), the userdiff pattern learned to identify the function definition in POSIX shells and bash.

See commit 2ff6c34 (22 Oct 2020) by Victor Engmark (l0b0).
(Merged by Junio C Hamano -- gitster -- in commit 292e53f, 02 Nov 2020)

userdiff: support Bash

Signed-off-by: Victor Engmark
Acked-by: Johannes Sixt

Support POSIX, bashism and mixed function declarations, all four compound command types, trailing comments and mixed whitespace.

Even though Bash allows locale-dependent characters in function names, only detect function names with characters allowed by POSIX.1-2017 for simplicity.
This should cover the vast majority of use cases, and produces system-agnostic results.

Since a word pattern has to be specified, but there is no easy way to know the default word pattern, use the default IFS characters for a starter. A later patch can improve this.

gitattributes now includes in its man page:

  • bash suitable for source code in the Bourne-Again SHell language.
    Covers a superset of POSIX shell function definitions.


With Git 2.32 (Q2 2021), userdiff patterns for "Scheme" has been added.

See commit a437390 (08 Apr 2021) by Atharva Raykar (tfidfwastaken).
(Merged by Junio C Hamano -- gitster -- in commit 6d7a62d, 20 Apr 2021)

userdiff: add support for Scheme

Signed-off-by: Atharva Raykar

Add a diff driver for Scheme-like languages which recognizes top level and local define forms, whether it is a function definition, binding, syntax definition or a user-defined define-xyzzy form.

Also supports R6RS library forms, module forms along with class and struct declarations used in Racket (PLT Scheme).

Alternate "def" syntax such as those in Gerbil Scheme are also supported, like defstruct, defsyntax and so on.

The rationale for picking define forms for the hunk headers is because it is usually the only significant form for defining the structure of the program, and it is a common pattern for schemers to have local function definitions to hide their visibility, so it is not only the top level define's that are of interest.
Schemers also extend the language with macros to provide their own define forms (for example, something like a define-test-suite) which is also captured in the hunk header.

Since it is common practice to extend syntax with variants of a form like module+, class* etc, those have been supported as well.

The word regex is a best-effort attempt to conform to R7RS (section 2.1) valid identifiers, symbols and numbers.

gitattributes now includes in its man page:

  • scheme suitable for source code in the Scheme language.


With Git 2.33 (Q3 2021), the userdiff pattern for C# learned the token "record".

See commit c4e3178 (02 Mar 2021) by Julian Verdurmen (304NotModified).
(Merged by Junio C Hamano -- gitster -- in commit f741069, 08 Jul 2021)

userdiff: add support for C# record types

Signed-off-by: Julian Verdurmen
Reviewed-by: Johannes Schindelin

Records are added in C# 9

Code example :

public record Person(string FirstName, string LastName);

For more information, see https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9


With Git 2.34 (Q4 2021), the userdiff pattern for "java" language has been updated.

See commit a8cbc89 (11 Aug 2021) by Tassilo Horn (tsdh).
(Merged by Junio C Hamano -- gitster -- in commit a896086, 30 Aug 2021)

userdiff: improve java hunk header regex

Signed-off-by: Tassilo Horn

Currently, the git diff(man) hunk headers show the wrong method signature if the method has a qualified return type, an array return type, or a generic return type because the regex doesn't allow dots (.), [], or < and > in the return type.
Also, type parameter declarations couldn't be matched.

Add several t4018 tests asserting the right hunk headers for different cases:

  • enum constant change
  • change in generic method with bounded type parameters
  • change in generic method with wildcard
  • field change in a nested class

And, still with Git 2.34 (Q4 2021), userdiff patterns for the C++ language has been updated.

See commit 386076e (24 Oct 2021), commit c4fdba3, commit 637b80c, commit bfaaf19 (10 Oct 2021), and commit 350b87c, commit 3e063de, commit 1cf9384 (08 Oct 2021) by Johannes Sixt (j6t).
(Merged by Junio C Hamano -- gitster -- in commit f3f157f, 25 Oct 2021)

For instance:

userdiff-cpp: permit the digit-separating single-quote in numbers

Signed-off-by: Johannes Sixt

Since C++17, the single-quote can be used as digit separator:

3.141'592'654
1'000'000
0xdead'beaf

Make it known to the word regex of the cpp driver, so that numbers are not split into separate tokens at the single-quotes.

这篇关于git diff 大块头中的摘录来自哪里?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆