Обратите внимание, что мой вопрос не «что мне делать?», Потому что я уже читал другие вопросы о переполнении стека. Я знаю, что должен указать параметр --allow-unrelated-stories.
У меня вопрос «почему».
Вот операции, которые я проделал с git версии 2.17.0.windows.1. Обратите внимание, что эта ошибка не возникает с git версии 2.7.4 в Linux:
Сначала я создаю пустой репозиторий на gitlab. Затем у меня есть 2 пользователя на 2 разных компьютерах:
Первый пользователь:
git clone <repository_url>
cd myproject
touch file1.cpp
git add file1.cpp
git commit -m "file 1 creation"
git push origin master
Второй пользователь:
git clone <repository_url>
cd myproject
touch file2.cpp
git add file2.cpp
git commit -m "file 2 creation"
git pull
В это время у меня появляется это сообщение об ошибке:
fatal: refusing to merge unrelated histories
Я не понимаю, ПОЧЕМУ у меня появляется это сообщение об ошибке в версии git для Windows, а не в Linux ...
Спасибо
I first create an empty repository
Вот в чем проблема. Пустой репозиторий не имеет никаких коммитов, поэтому, когда каждый пользователь выполняет git commit
после извлечения пустого репозитория, они создают единственную корневую фиксацию. Таким образом, когда один нажимает, а другой пытается извлечь (уже выполнив локальную корневую фиксацию Другой), Git жалуется, потому что вышестоящий общий ресурс, нет фиксируется с локальной копией. Это две совершенно разные, не связанные между собой истории.
Вы можете избежать этого, обеспечив создание и отправку начальной фиксации до того, как кто-либо другой извлечет ее (чтобы у всех был одинаковый корневой коммит), или используя --allow-unrelated-histories
для обхода ошибки, о которой вы упомянули. Лично я считаю, что первый вариант лучше.
Что касается расхождения между двумя установками Git: как прокомментировал @Schwern, это поведение было добавлено в Git 2.9.