Что означает предупреждение git "Обновление текущей проверенной ветки"?
Когда я делаю git push, я вижу следующее:
warning: updating the currently checked out branch; this may cause confusion,
as the index and working tree do not reflect changes that are now in HEAD.
Я погуглил это сообщение, и все, что я могу найти, - это обсуждение списка рассылки git, где авторы пытаются решить, как сделать это сообщение лучше, чтобы сообщить мне, в чем заключается настоящая проблема.
Как я это вызвал и как это исправить?
3 ответа
Это происходит, когда вы продвигаетесь к не голому репо. Голый репо - это тот, который состоит исключительно из .git
каталог; Репозиторий без обнажения также включает в себя проверку. В общем, вы не должны подталкивать к не голому репо; фактически, в будущей версии git это будет запрещено. Если вы нажмете на непроигрышное репо, то ГЛАВА этого репо будет не синхронизирована с индексом и рабочей копией.
Если вы создаете репо, к которому люди захотят подтолкнуть, вы должны создать его, используя git init --bare
(а также git init --bare --shared
если доступ к нему требуется нескольким учетным записям), или git clone --bare
если вы создаете его путем клонирования существующего репо.
Короче говоря, ваш удаленный репозиторий больше не является пустым, и вы добавляете ветку удаленной проверки.
Смотрите " Как опубликовать Git-репозиторий":
Пустое хранилище - это хранилище без извлеченной рабочей копии кода. Он содержит только базу данных git.
Как правило, вы никогда не должны вставлять в репозиторий, содержащий изменения в рабочей копии.
Чтобы этого не произошло, мы делаем хранилище сервера пустым хранилищем - у него нет рабочей копии
Обратите внимание, что целью "push" обычно является пустой репозиторий (т. Е. Без собственного рабочего дерева).
Вы также можете отправить в репозиторий, у которого есть извлеченное рабочее дерево, но рабочее дерево не будет обновлено при загрузке.
Это может привести к непредсказуемым результатам, если ветвь, к которой вы переходите, является извлеченной веткой.
Если определено отдельное рабочее дерево (которое может, например, соответствовать DocumentRoot веб-сервера), вам необходимо:
- иметь
post-receive
подключите ваш удаленный репозиторий ( как описано здесь), запустивgit checkout -f
" а также - игнорировать предупреждающее сообщение (
git config receive.denycurrentbranch ignore
)
Проверьте в вашем удаленном хранилище значение git config core.worktree
а также git config core.bare
Я обнажил свой репозиторий, клонировав новый, пустой, репозиторий из моего испорченного, на всякий случай сохранив перепутанный, и заменив его своим клонированным голым.
Я новичок в git, и когда я настраивал репозиторий, я забыл использовать опцию --bare. Спасибо за вашу помощь!
С тех пор я читал Git-книгу О'Рейли, и теперь я абсолютный новообращенный.