2013-08-28 2 views
3

Почему я не могу merge в голое репо? Голые репозитории не имеют HEAD или рабочего дерева. В файле конфигурации мы видим bare=true.Почему вы не можете объединиться в готическом репо?

Вы также не можете pull в голом репо (потому что pull = fetch & слияние и слияние не работает). Однако вы можете нажать на голый репо - почему? Насколько мне известно, push также содержит слияние, но в этом случае мы можем сделать это хорошо.

Итак, вопрос может быть «как работает git merge?». Зачем нужен HEAD? Что он делает при слиянии?

+1

Push не делает слияние в целевом репо. Это только ускоренное слияние, которое не является реальным слиянием, но только перемещает голову ветви в другое место. – Chronial

ответ

1

As Chronial points out, нажатие делает быстрые слияния или принудительные обновления, которые просто перемещают ссылки/указатели перехода на другую фиксацию.

В реальном слиянии без перемотки вперед вам нужна рабочая копия в случае возникновения конфликтов, которые необходимо устранить. Ранее это упоминалось другими пользователями Stack Overflow; например, см this answer (курсив мой):

мерзавец выполняет все слияния-й операции (реальные сливает, вишневые кирки, rebases, применение патча) на рабочем дереве. Об этом упоминается несколько раз, прежде чем, например, в одном из ответов знающих Якуба Narębski в:

Там нет никакого способа, которым сливаться (или перебазировать) может работать, не касаясь рабочего каталога (и индекс), так как может конфликты слияния, которые должны быть разрешены с использованием рабочего каталога (и/или индекса).

+0

Я прав? Когда git делает слияние - прежде всего, он ищет свою базу данных. Git сравнивает хэши (и если они разные - он разархивирует снимки из 2-х файлов и сравнивает их внутри). Зачем нужен рабочий каталог для слияния двух фиксированных ветвей из собственной базы данных? –

+0

Второе замечание и вопрос. Когда мы сливаемся - что делает git в первую очередь? Он пытается сравнить хеши, но какие хеши? Хеши текущей ветви и слияние с бранч. Когда мы выходим на голый репо, что делает git? Git пытается найти хэши текущего бранча (даже в голом репо у нас есть мастер-бранч), git посмотреть HEAD мастера, чтобы найти последние использованные (HEAD) хеши, но голой репо не имеет HEAD (даже рабочее дерево). Так оно получает ошибку. Это правда? пожалуйста, исправьте меня. –

 Смежные вопросы

  • Нет связанных вопросов^_^