Что такое A, B и C в слиянии KDIFF

Почему мне дается три варианта при слиянии моего кода с чужим? Разве не должен быть только мой код, код другого человека и вывод ниже? Документация для KDIFF не помогает мне понять.


person smuggledPancakes    schedule 25.10.2010    source источник


Ответы (5)


Похоже, вы выполняете трехстороннее слияние, поэтому A должна быть базовой ревизией, на которой основаны B и C, B — их, а C — ваша (я полагаю, хотя B и C могут быть противоположными).

person eldarerathis    schedule 25.10.2010
comment
О чем базовая ревизия? Помогает ли это в некоторых случаях? - person smuggledPancakes; 26.10.2010
comment
@ user464095: Для KDiff я считаю, что это версия, которую изменяют и B, и C. Таким образом, вы можете сравнить B с его основанием (A), C с его основанием (также A) и изменения в B и C друг с другом. Таким образом, вы можете разрешать конфликты, используя изменения в B или C или возвращаясь к оригиналу (A). - person eldarerathis; 26.10.2010
comment
Я так и не понял, можно подробнее? - person smuggledPancakes; 26.10.2010
comment
Итак, рассмотрим случай, когда вы и другой разработчик вносите противоречивые изменения в один и тот же код. Обычно полезно иметь контекст исходного файла, чтобы вы знали, нарушает ли кто-либо из вас предыдущую функциональность. Вы можете сравнить свой файл с файлом другого разработчика, разрешить конфликты, а затем сравнить его с оригиналом, но трехстороннее сравнение выполняет ту же функцию за меньшее количество шагов. - person eldarerathis; 27.10.2010
comment
Как поясняет @gbarry в этой теме SO, версия BASE — это та, которую вы в последний раз загрузили из репозитория, по крайней мере, с помощью Subversion. Он также рассказывает о конфликтах редактирования и о том, как они влияют на версии BASE и HEAD. - person hotshot309; 20.12.2012
comment
Это первый раз, когда я действительно понял причину трехстороннего дифференциала. Спасибо! - person Clonkex; 14.06.2018
comment
@eldarerathis +1 за то, что сказал меньше шагов вместо меньшего количества шагов ;) - person David Klempfner; 28.11.2019

A относится к версии, на которой основана ваша цель слияния. Если вы выполняете слияние из ветки в магистраль, «А» будет предыдущей версией магистральной линии.

B — это то, что в настоящее время находится в вашей локальной папке магистрали, включая локальные изменения.

C — это версия, которую вы хотите объединить поверх версии B.

person Th 00 mÄ s    schedule 09.08.2011
comment
B означает до применения тайника ИЛИ после применения тайника? - person Nagappa L M; 10.07.2015
comment
Скрытые изменения не применяются во время слияния. Они остаются спрятанными до тех пор, пока не будут явно удалены. - person Th 00 mÄ s; 10.07.2015

A – это ваша родительская версия, в которой B и C являются дочерними.
Это означает, что B содержит изменения, внесенные в A user1/repo1, а C также содержит изменения в A, но другим пользователем (user2/repo2).

kdiff дает вам возможность либо выбрать модификацию из b или c (или взять оба), либо из родителя также «A»

person RollerCosta    schedule 31.10.2011

A (BASE) > Исходный файл, который в настоящее время находится в удаленном репозитории.
B (LOCAL) > Ваш файл. Это показывает только ваши изменения по сравнению с A.
C (REMOTE) > Их файл. Это показывает только их изменения по сравнению с A.

Если изменения находятся в разных строках кода, вы берете как из B, так и из C. Если изменения находятся в одних и тех же строках кода (конфликт), вы берете либо из B, либо из C.

person Nikhil Vartak    schedule 05.10.2017

Если бы я делал git rebase, мое наблюдение было таким: C - это то, что в my_branch локально (т.е. было видно в моем редакторе до того, как началась перебазировка и возникли конфликты). B - ветка, которую я перебазировал my_branch поверх (например, master ветки) A - базовая версия B и C (что не имело для меня большого значения в данном случае)

person Aleks Tkachenko    schedule 06.04.2018
comment
Да, кажется, что B & C меняются местами между слиянием и перебазированием - person pdem; 23.01.2019