Когда во время обычного локального слияния возникает конфликт, в контекстном меню файлов, перечисленных в окне разрешения конфликтов, отображаются следующие записи:
Choose local (theirs)
Choose remote (ours)
Из того, что я понимаю о git, должно быть сказано:
Choose local (ours)
Choose remote (theirs)
Это может сбивать с толку, потому что эти два названия противоречат друг другу.
Откроется меню, которое содержит, среди прочего, следующие записи:
Choose local (ours)
Choose remote (theirs)
Откроется меню, которое содержит, среди прочего, следующие записи:
Choose local (theirs)
Choose remote (ours)
GitExtensions на самом деле правильный. См. Раздел слияния по этой ссылке: http://stackoverflow.com/questions/3051461/git-rebase-keeping-track-of-local-and-remote
«наш» - это текущая ветка, а «их» - это ветка, в которую мы сливаемся. Типичный рабочий процесс git - создать локальную ветвь темы, зафиксировать ее, а затем объединить с «главной» веткой. Таким образом, «их» также называется «локальным», а «наш» - «удаленным», поскольку он обычно следует за состоянием удаленного репозитория.
Я согласен с dleinhaeuser, эти имена действительно расплывчаты.
Новички всегда не понимают, какую версию выбрать. Я помогаю своим друзьям с git, и большинство из них спрашивали меня, какой выбор правильный в этом окне.
Я не уверен, что у git есть один типичный рабочий процесс, потому что каждый использует его со своими предпочтениями. Например, когда я работаю над тематической веткой в течение нескольких дней или недель, я предпочитаю время от времени объединять master в свою тематическую ветку, чтобы предотвратить ад слияния и как можно скорее разрешить конфликты. Это помогает поддерживать совместимую, готовую к слиянию базу кода, и это действительно полезно для длинных веток функций.
Я предлагаю просто написать настоящие имена веток и полагаться на то, что пользователь знает, какая ветка содержит фактический код.
Например, «выбрать нашего (главного)» и «выбрать их (feature-branch-42)» - гораздо более понятные названия.
да, это очень сбивает с толку. Наши и их действительно имеют значение в git-land: вы можете использовать их для изменения стратегии слияния, поэтому вы должны использовать их так же, как git. И да, было бы лучше всего упомянуть фактическое имя ветки, но я не уверен, поддерживает ли это kdiff.
Рассмотрим следующую последовательность команд:
> mkdir test && cd test
> git init
> touch test.txt
> git add test.txt
> git commit -m "..."
> git branch test
> git checkout test
> echo "test" >test.txt
> git commit -a -m "..."
> git checkout master
> echo "master" >test.txt
> git add -a -m "..."
> git merge test
На этом этапе будет конфликт слияния test.txt.
Если я сейчас открою git gui, он покажет конфликт в окне фиксации.
При щелчке правой кнопкой мыши в окне сравнения будет предложено «Использовать удаленную версию» и «Использовать локальную версию».
Итак, согласно логике git gui, текущая ветвь является «локальной», а ветка, в которую я сливаю ее, - «удаленной».
Если я продолжу использовать командную строку вместо git gui для разрешения конфликта, я могу выполнить следующие команды:
> git checkout --ours test.txt
> cat test.txt
master
> git checkout --theirs test.txt
> cat test.txt
test
Итак, в интерфейсе командной строки «наш» относится к текущей ветке, а «их» - к той, с которой я сливаюсь.
Вот почему я думаю, что меню в Git Extensions дает противоречивую информацию.
Может быть, наши и их меняются местами, когда слияние выполняется по-разному. Если так, то я об этом не подозреваю.
Спасибо, в этом есть смысл. Фактически, когда вы запускаете kdiff для разрешения конфликта, текущая ветвь (--ours) называется .LOCAL. Итак, да, похоже, проблема с меню.
Хорошо. Видимо «наши» и «их» меняются местами при ребазе.
Может быть, git gui настроен таким образом, что «локальный» и «удаленный» имеют смысл для конфликта слияния во время операции извлечения?
В любом случае это определенно сбивает с толку людей, переходящих с git gui (таких как я).
Возможно, будет достаточно указать на это в документации.
Хмммммм, думаю, если вы выполните команду «pull --rebase» (которую я использую по умолчанию), то меню может быть правильным из-за переключения между нами и нами. Но да, это очень сбивает с толку и должно быть где-то задокументировано. Также локальный и удаленный
терминология очень запутанная, так как у нас уже есть локальные филиалы и удаленные репозитории.
Кстати, вы можете сделать это немного эффективнее:
mkdir test && cd test
git init
сенсорный test.txt
git добавить test.txt
git commit -m "..."
git checkout -b test *эхо "тест"> test.txtgit commit -am "..."
мастер проверки git
эхо "мастер"> test.txt
git commit -am "..." **
git merge test
Первоначальное объяснение проблемы, данное dleinhaeuser, является правильным.
Правильные слова должны быть
Выбирайте местный (наш) Выберите пульт (их)
Вы можете увидеть это, выбрав «Открыть локальный с помощью» и «Открыть удаленный с помощью», и увидев, что «локальный» открывает ваш файл с вашими новыми изменениями, а удаленный открывает их версию.
Rebase сложнее (я всегда смотрю на эту картинку, чтобы убедиться, что все делаю правильно, ха-ха). «Наши» и «их», на мой взгляд, неверны.
Скажем, вы хотите переставить «Branch A» на «Master».
Несмотря на то, что вы должны быть зарегистрированы в «Ветке A», чтобы переустановить ветвь A на Master, в конфликте слияния вы считаются находящимися в ветке Master (несите меня сюда ...) Считается, что вы находитесь в Master, потому что вы пытаетесь «воспроизвести» фиксацию ветки A ПОСЛЕ фиксации Master, так что это похоже на то, что вы находитесь в ветке Master и выполняете pull.
верно. Эта публикация довольно хорошо объясняет:
http://stackoverflow.com/questions/3051461/git-rebase-keeping-track-of-local-and-remote
Итак, local / remote должны быть нашими / их для слияния, а их / нашим - для перебазирования.
Это особенно сбивает с толку для конфликтов после извлечения, когда их явно далекие. Кто-нибудь планирует это исправить?
Хорошо, метки должны быть исправлены в приведенном выше коммите.
Нормальное слияние говорит
Выбирайте местный (наш) Выберите пульт (их)
и перебазирование слияния остается неизменным, т.е.
Выберите местный (их) Выбери пульт (наш)
Было бы намного легче понять, что происходит, если бы вместо LOCAL / REMOTE или OURS / THEIRS он просто отображал имена веток.
См. # 6582 для более позднего обсуждения
Самый полезный комментарий
Я согласен с dleinhaeuser, эти имена действительно расплывчаты.
Новички всегда не понимают, какую версию выбрать. Я помогаю своим друзьям с git, и большинство из них спрашивали меня, какой выбор правильный в этом окне.
Я не уверен, что у git есть один типичный рабочий процесс, потому что каждый использует его со своими предпочтениями. Например, когда я работаю над тематической веткой в течение нескольких дней или недель, я предпочитаю время от времени объединять master в свою тематическую ветку, чтобы предотвратить ад слияния и как можно скорее разрешить конфликты. Это помогает поддерживать совместимую, готовую к слиянию базу кода, и это действительно полезно для длинных веток функций.
Я предлагаю просто написать настоящие имена веток и полагаться на то, что пользователь знает, какая ветка содержит фактический код.
Например, «выбрать нашего (главного)» и «выбрать их (feature-branch-42)» - гораздо более понятные названия.