Git 中的内部/外部合并是什么意思?



在 git 中,两个分支被合并,但有时是内部合并,有时是外部合并。我不熟悉 Git。这两个术语是什么意思?它们的使用场景是什么?

在一个程序中,作者想弄清楚合并是哪种类型,他定义如下。

'ExtMerge': re.compile(r'^ +Merge( (branch|branches|tag|tags) .* of)? ([^ ]+:[^ ]+)( into .*)?n$'),
'IntMerge': re.compile(r'^ +(Merge|Pull) .* into .*$'),
'IntMerge2': re.compile(r"^ +Merge branch(es)? '.*$")

这些正则表达式显然是为了匹配为您git merge格式的默认消息而设计的,或者在一种(第一种(情况下,git pull指示git merge为您格式化:

^ +

这将在行首查找一个或多个空格。

Merge

这当然与字面意思"合并"相匹配。

( (branch|branches|tag|tags) .* of)?

这匹配可选branchanythingof(带前导空格(。 这看起来很像 Python 代码;如果是这样,括号表示分组(这是?使整个序列可选所必需的(和检索匹配字符串的能力。

([^ ]+:[^ ]+)( into .*)?n$

最后一部分将捕获一些包含冒号但没有空格的单词,该单词由冒号两侧的至少一个字符组成,后跟一个可选的input anything,后跟一个文字换行符,后跟一个空行或字符串结尾(n$序列有点棘手,也许是多余的(。

因此:

Merge branch 'foo' of ssh://example.com into bar

(请注意合并M前的前导空格(可能在此处匹配。 这是git pull ssh://example.com foo在运行它时bar在分支上时将生成的默认消息。 这也很可能匹配:

Merge branch 'foo' of ssh://example.com

这是git pull ssh://example.com foo在分支master上时将生成的默认消息。

第二个正则表达式:

^ +(Merge|Pull) .* into .*$

非常相似;它匹配以空格开头的任何内容,以及文字单词MergePull后跟一个空格,后跟任何内容,后跟into(包括两个空格(,后跟任何内容。 最后的$是多余的。 请注意,此正则表达式匹配:

Merge branch 'foo' of ssh://example.com into bar

因此,如果标签ExtMergeIntMerge有意义,则此特定pull生成的消息指示合并既是"内部">是"外部"。

最后一个正则表达式是:

^ +Merge branch(es)? '.*$

和以前一样,这匹配前导空格(至少需要一个(,字面单词Merge branch后跟一个可选的es,后跟一个空格和一个单引号',然后是行尾的任何内容。 与第二种情况一样,最后的$是多余的,因为无论如何.*都会消耗所有内容,直到行尾。

这与git merge生成的默认合并消息匹配。 但是,它也匹配,例如,完全相同:

Merge branch 'foo' of ssh://example.com into bar

我们一开始就看到了。 所以显然这同时是一个外部合并和两种不同类型的内部合并,在你正在使用的任何源代码的命名法中。

所有这些默认合并消息都是可编辑的,运行git merge的人(可能通过git pull或可能不通过(都可以更改它们。 因此,不可能说出编写这些正则表达式的人的想法。 也许你可以直接问那个人。

相关内容

最新更新