Почему вы не можете слить голый репозиторий git?

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

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

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


person Naughty Leopard    schedule 28.08.2013    source источник
comment
Push не выполняет слияние в целевом репо. Он выполняет только ускоренное слияние, которое не является настоящим слиянием, а только перемещает головку ветки в другое место.   -  person Chronial    schedule 29.08.2013


Ответы (1)


Как указывает Chronial, нажатие выполняется быстро -forward слияния или принудительные обновления, которые просто перемещают ссылки/указатели ветвей на другую фиксацию.

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

git выполняет все операции слияния (настоящие слияния, вишневые выборки, перебазирования, исправление приложения) в рабочем дереве. Об этом упоминалось несколько раз ранее, например, в одном из ответов знающего Якуба Наребского:

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

person Community    schedule 29.08.2013
comment
Я прав? Когда git выполняет слияние, в первую очередь он ищет свою базу данных. Git сравнивает хэши (а если они разные — разархивирует снапшоты 2-х файлов и сравнивает их внутри). Почему git нужен рабочий каталог для объединения двух зафиксированных веток из собственной базы данных? - person Naughty Leopard; 29.08.2013
comment
Второе замечание и вопрос. Когда мы объединяемся — что git делает в первую очередь? Это попытка сравнить хэши, но какой из хэшей? Хэши текущей ветки и слияния с ветки. Когда мы тянемся к голому репо, что делает git? Git пытается найти хэши текущей ветви (даже в чистом репо у нас есть основная ветвь), git ищет HEAD мастера, чтобы найти последние использованные (HEAD) зафиксированные хэши, но голое репо не имеет HEAD (даже рабочее дерево ). Таким образом, он получает ошибку. Это правда? пожалуйста, поправьте меня. - person Naughty Leopard; 29.08.2013