Окт
06
2021
0

Исправляем ошибку shallow update not allowed в git

Когда появляется данная ошибка

Ошибка shallow update not allowed появляется, когда вы пытаетесь запушить локальный репозиторий с неполной историей в новый удаленный.

То есть:

  1. Заходите в папку с существующим гит
  2. Добавляете свой удаленный репозиторий git remote add my_repo https://github.com/user/repo.git
  3. Пытаетесь запушить туда git push my_repo master
  4. Получаете ошибку, что удаленный репозиторий не может принять ваш неполный.
Исправляем ошибку shallow update not allowed в git

Как сделать неполный репозиторий

Неполный репозиторий создается командой git clone с параметром --depth N, где N - количество последних коммитов, которые выкачать.

Например команда может выглядеть так:

git clone https://github.com/headzoo/surf --depth 10

Если вы выкачиваете не все коммиты, то отправить правки обратно можно будет только в репозиторий, в котором есть вся история (тот же исходный, откуда скачивали).

Как проверить полный ли ваш репозиторий

Первый способ, проверить первый доступный коммит. Введите:

git log --reverse

Смотрите пометки у первого коммита, если там есть grafted - значит до него есть еще коммиты в удаленном репо, но они не доступны. Ваш репозиторий не полный.

git grafted commit

Второй способ, показывает как создавался гит, а не текущее состояние.

Если ваша версия гит 2.15 или новее, запустите:

git rev-parse --is-shallow-repository

Команда выведет true, если ваш репозиторий не полный, в ином случае false.

Если версия старше 2.15, команда:

[ -f $(git rev-parse --git-dir)/shallow ] && echo true || echo false

Как исправить ошибку

Если есть доступ в старый репозиторий

Если есть доступ в старый удаленный репозиторий, в котором хранится полная история, воспользуйтесь командой:

git fetch --unshallow origin-old

Где origin-old - имя remote репозитория, если удалили уже его - добавьте заново командой git remote add.

Когда нет доступа в старый репозиторий

Путь простой - пересоздать гит

Самое простое - удалить гит и создать заново. Так мы потеряем историю коммитов, но гит уже будет полный и его можно будет запушить хоть куда.

Чтобы удалить гит, зайдите в папку проекта и удалите папку .git либо вручную, либо командой:

rm -rf .git

После этого заново создайте гит. Как создать гит в Битрикс, я писал в одной из предыдущих статей.

Путь сложнее - перебазирование истории

Можно оставить доступную историю, но указать что коммитов, которых у нас нет - не было вовсе. Стоит понять, что если доступа в старый удаленный репозиторий нет, то полную историю нам взять неоткуда - будем работать с тем, что доступно.

Инструкция:

git rebase -i --root
git commit --amend --no-edit
git rebase --continue

git rebase -i --root - начинаем перебазирование. У вас откроется окно редактора, у первого коммита надо заменить pick на edit.

Если открылся vim (как у меня), то для редактирования надо нажать на клавиатуре кнопку Insert. Отредактировать текст, нажать Esc. После ввести !wq, нажать Enter. Редактор сохранит правки и закроется.

Исправляем ошибку shallow update not allowed в git

git commit --amend --no-edit - провалидировать коммит

git rebase --continue - завершить перебазирование.

После проделанных команд, гит будет считаться полным. Вот на скрине пометка grafted пропала:

Исправляем ошибку shallow update not allowed в git

Пожалуйста, оцените на сколько вам понравилась статья!
Голосов: 2 Среднее: 5