我該如何理解 diff3 合併的條件是明確定義的?
diff3 mine older yours
您可以通過注意參數的字母順序來記住它們的順序。
您可以將其視為從您的中減去舊的並將結果添加到我的中,或者將其合併到我的中,這些更改會變成您的舊。這種合併是明確定義的,只要我的和舊的匹配在每個這樣的變化附近。當所有三個輸入文件都不同或只有舊文件不同時,這是不正確的;我們稱之為衝突。當所有三個輸入文件都不同時,我們將衝突稱為重疊。
…
‘-e’、’-3’ 和 ‘-x’ 選項只選擇未合併的更改,即我的和你的不同的更改;他們忽略了從 old 到 yours 的更改,而 mine 和 yours 是相同的,因為他們假設這些更改已經合併。
“每次這種變化附近的我和老年人匹配”是什麼意思?
“只有年齡不同時”是否意味著我的和你的相同但與舊的不同?合併不是很簡單,因為我們可以使用我的或你的嗎?在這種情況下,為什麼沒有明確定義合併?
這三種情況如何涵蓋所有可能的情況:
- 當“我和老年人在每個這樣的變化的附近匹配”時
- “當所有三個輸入文件都不同時”
- “當只有年齡不同時”?
“在我的和你的相同的情況下從舊到你的變化”與“只有舊的不同時”的變化相同嗎?
謝謝。
“每次這種變化附近的我和老年人匹配”是什麼意思?
“我的和舊的匹配在每個這樣的變化的附近”意味著當考慮“舊的”和“你的”之間的每個變化時,變化的上下文也可以在“我的”中找到。換句話說,這意味著“我的”和“年長的”就“年長的”和“你的”之間的每個人的變化而言是相同的。考慮
mine other yours ------------------------------------------------ Some text Some text Some text Some more text Some more test Changed text Continues Continues Continues Mine changes This is gone This is gone The file ends The file ends The file ends
一行在“其他”和“我的”之間發生了變化,另一行在“其他”和“你的”之間發生了變化。當查看從“other”到“yours”的變化時,我們發現“mine”中的上下文相同,因此可以將變化應用於“mine”而沒有歧義或衝突。
“只有年齡不同時”是否意味著我的和你的相同但與舊的不同?
是的。
合併不是很簡單,因為我們可以使用我的或你的嗎?在這種情況下,為什麼沒有明確定義合併?
“定義明確”的定義是“舊的”到“你的”變化的上下文在“我的”中是相同的。當“我的”和“你的”是相同的,並且與“舊的”不同時,那麼根據定義,這種變化是不明確的。
這可能看起來令人驚訝,但三向合併的指導原則是任何衝突,即使它導致相同的內容,也必須由使用者辨識和檢查。我沒有手頭的例子,但它確實發生在“我的”和“你的”中給定的行是相同的,但是考慮到正在合併的其他更改,在合併結果中是不可取的。
考慮這一點的另一種方式是,三向合併的目的是調和兩個不同的歷史:從“舊”到“我的”的歷史,以及從“舊”到“你的”的歷史。即使這兩種歷史導致相同的內容,也需要重新評估,而不是盲目應用。
的開發人員
diff3
確實意識到無論如何都應該經常應用這些更改。、-e
和選項執行此操作-3
。-x
這三種情況如何涵蓋所有可能的情況?
第一個案例描述的是全域分析,但我認為其他兩個應該在單一變化的背景下理解。如果我們考慮每次更改(從“older”到“yours”)查看的所有三個案例,它們變成(記住“older”和“yours”是不同的):
- “我的”和“老”是一樣的
- “mine”和“older”不同,“mine”和“yours”不同
- “mine”和“older”是不同的,“mine”和“yours”是相同的
考慮真值表:
mine == older mine == yours older == yours Case -------------------------------------------------------- Yes Yes Yes N/A Yes Yes No Imp. Yes No Yes N/A Yes No No 1 No Yes Yes N/A No Yes No 3 No No Yes N/A No No No 2
N/A 表示不考慮該案例:從“舊”到“您的”沒有變化。小鬼。表示這種情況是不可能的(通過平等的傳遞性)。這表明三種情況足以涵蓋所有可能性。
“在我的和你的相同的情況下從舊到你的變化”與“只有舊的不同時”的變化相同嗎?
是的。