簡體   English   中英

任何使用 git merge 耐心策略的例子?

[英]Any example to use git merge patience strategy?

我找不到任何實際示例,其中--patience給出的結果與正常策略不同。

根據這個答案,如果我有這個文件:

.foo1 {
    margin: 0;
}

.bar {
    margin: 0;
}

我以這種方式更新它:

.bar {
    margin: 0;
}

.foo1 {
    margin: 0;
    color: green;
}

我應該看到兩個不同的差異取決於我使用的算法。

但對我來說,這些命令的輸出總是一樣的

git diff --diff-algorithm=patience
git diff

diff --git a/foo.bar b/foo.bar
index 453dcb1..42cd4b4 100644
--- a/foo.bar
+++ b/foo.bar
@@ -1,7 +1,8 @@
-.foo1 {
+.bar {
     margin: 0;
 }

-.bar {
+.foo1 {
     margin: 0;
+    color: green;
 }
\ No newline at end of file

我正在使用git version 2.14.2

我看到 - 在有一系列功能並且在中間添加一個新功能的情況下, --patience一直很有用。

int foo(void)
{
  ...
}

int baz(void)
{
  ...
}

如果你在兩者之間添加int bar() ,那么diff通常看起來像這樣:

+ }
+
+ int bar()
+ {
+    ...

這是正確的,但不直觀。

但隨着 - --patience你會得到預期的

+ int bar()
+ {
+   ...
+ }
+

除了增加一定程度的直觀性外,它還增加了可預測性。 如果你正在進行meta-diff(差異的差異),這可能很有用:采取兩組更改並比較它們以查看是否在兩個地方都進行了相同的更改。 如果一個差異以一種方式計算包圍而另一個以另一種方式計算包圍,則您將錯誤地確定您的兩組更改不相等。 但是如果你告訴git使用--patience你就可以獲得一致格式的可預測性。 (這不是理論上的,而是通過痛苦的經歷來學習。)

在匹配其余行之前,“耐心”算法會拋出重復的行。 (這有點過於簡單 - 它會在子框中拋出重復的差異;在每次遞歸時,它會拋出只在子框內重復行,而不是在整個文件重復。對於第一遍,盡管,子框是“整個文件”。)

在您的示例中,有兩行重復,即margin: 0; } 所以耐心差異子序列查找器的初始輸入是:

.foo1 {

.bar {

對於左側或“A”側和:

.bar {

.foo1 {
    color: green;

對於右邊或“B”面。

空行匹配, .foo1 {行匹配。 但是這些都不合適,而且無論如何只有一個元素,所以它們沒用。

整個算法然后回退到普通差異,你獲得與普通差異相同的輸出。

編輯:如何構建示例

構造算法給出不同結果的輸入並不容易。 你需要的是有丟棄的重復行后發現,但沒有這樣做沒有找到漫長的共同序列。 考慮寫一些像:

line 1
line 2
noise
noise
noise
noise
line 3
noise
noise
noise
line 4

作為輸入的一部分(在差異的一個或兩個“邊”,A和B上),然后僅在“非噪聲”線中進行更改。 普通的git diff將在noise線上同步(在每個部分使用不同數量的noise線),而耐心差異會將它們拋棄。 如果許多噪聲線部分中的一個構成最長公共子序列的一部分,則普通差異將選擇與其匹配,然后遞歸以找到匹配上方或下方的部分內的差異。 當降噪版本具有不同的最長公共子序列時,耐心差異將匹配那些,並遞歸(現在不同的)不匹配的子序列。

提醒:在 Git 2.33.1(2021 年第四季度)中,pamtience 合並策略不再存在,取而代之的是默認的合並 ORT(“表面上遞歸的雙胞胎”)

請參閱提交 81483fe提交 67feccd提交 6320813提交 b36ade2提交 4d15c85提交 002a6df提交 510415e提交 e80178e提交 b378df7提交e034 ( newren . newren ) newren
(由Junio C gitster合並-- gitster -- in commit aca13c2 ,2021 年 8 月 30 日)

merge-strategies.txt : 避免特別偏愛耐心算法

確認者:德里克·斯托利
確認者:約翰內斯·辛德林
簽字人: Elijah Newren

我們已經有了 diff-algorithm 來解釋為什么會有特殊的 diff 算法,所以我們不需要耐心重新解釋。
由於歷史原因,耐心作為它自己的頂級選項存在,但沒有理由給予它特殊的偏好或再次記錄它並表明它比其他差異算法更重要,因此只需將其稱為diff-algorithm=patience的已棄用速記。

merge-strategies現在包含在其手冊頁中

已棄用diff-algorithm=patience同義詞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM