Що таке A, B та C у злитті KDIFF


78

Чому я отримую три варіанти злиття між своїм кодом та чужим? Чи не повинен бути просто мій код, код іншої людини та вихідні дані нижче? Документація до KDIFF не допомагає мені зрозуміти.

Відповіді:


35

Здається, ви робите тристороннє злиття , тому A має бути базовою версією, на якій базуються B і C, B є їхньою, а C - вашою (я вважаю; B і C можуть бути навпаки).


2
Про що йдеться в базовій редакції? Чи допомагає це в деяких випадках?
контрабандні млинці

6
@ user464095: Для KDiff я вважаю, що це модифікація, яку змінюють як B, так і C. Отже, ви можете порівняти B з її основою (A), C з її основою (також A) та зміни B та C між собою. Таким чином ви можете вирішити конфлікти, використовуючи зміни в B або C або повернувшись до оригіналу (A).
eldarerathis

2
Я досі не розумію, чи можете ви детальніше розповісти?
контрабандні млинці

12
Ну, розглянемо випадок, коли ви та інший розробник вносите суперечливі зміни в той самий код. Зазвичай корисно мати контекст оригінального файлу, щоб ви знали, чи порушує хтось із вас попередню функціональність. Ви можете розрізнити свій файл з файлами іншого розробника, вирішити конфлікти, а потім розрізнити його з оригіналом, але тристоронній диф виконує ту саму функцію за меншу кількість кроків.
eldarerathis

Як пояснює @gbarry у цьому пов'язаному потоці SO , ревізія BASE - це та, яку ви востаннє завантажили із сховища, принаймні з Subversion. Він також розповідає про редагування конфліктів та про те, як це впливає на перегляд BASE та HEAD.
hotshot309

75

Посилання стосується версії, на якій базується ваша мета злиття. Якщо Ви об'єднаєте з гілки в магістраль, попередньою версією магістралі буде 'A'.

B - це те, що ви наразі маєте у своїй локальній папці магістралі, включаючи локальні зміни.

C - версія, яку ви хочете об'єднати поверх B.


B означає до застосування заначки АБО після застосування заначки?
почуватись добре і програмувати

3
Заховані зміни не застосовуються під час злиття. Вони залишаються в прихованому режимі, поки їх явно не розмивають.
ч. 00 м.

13

A - це ваша батьківська редакція, в якій B і C є дочірніми .
Це означає, що B містить зміни, внесені в A користувачем1 / repo1, а C також містить зміни в A, але іншими користувачами ( user2 / repo2 )

kdiff дає вам можливість вибрати модифікацію з b або c (або взяти обидві) або з батьківської також "A"


11

(BASE) ‐‐> Оригінальний файл, який наразі знаходиться у віддаленому репо.
B (LOCAL) ‐‐> Ваш файл. Тут відображаються лише ваші зміни порівняно з A.
C (REMOTE) ‐‐> Їх файлом. Це показує лише їх зміни порівняно з А.

Якщо зміни входять до різних рядків коду, ви берете як з B, так і з C. Якщо зміни знаходяться в одних і тих самих кодових рядках (конфлікт), ви берете або з B, або C.


3

Якби я це зробив git rebase, моє зауваження було таким: C - це те, що в my_branch локально (тобто було помічено в моєму редакторі до початку перебазування та виникнення конфліктів). B - гілка, яку я перебазував my_branch поверх (скажімо, головна гілка, наприклад) A - базова ревізія B & C (що для мене в цьому випадку не мало великого значення)


Так, здається, B & C обернені між злиттям і перебазуванням
pdem
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.