У меня есть проект под управлением версией Git, который я работал как на сервере, так и на моем локальном компьютере. Первоначально я установил удаленный источник в качестве локального компьютера, но теперь я хотел бы изменить его на BitBucket.
На сервере я использовал команду
git remote set-url origin bitbucket_address
Но теперь, когда я пытаюсь продвинуть свой проект, я получаю ошибку
! [remote rejected] master -> master (shallow update not allowed)
Что вызывает это и как я могу это исправить?
git clone --depth
?shallow
вашей.git
папке должен быть файл с именем .shallow
файл.Ответы:
Похоже, вы привыкли
git clone --depth <number>
клонировать свою локальную версию. Это приводит к мелкому клону . Одним из ограничений такого клона является то, что вы не можете перенести его в новый репозиторий.Теперь у вас есть два варианта:
Итак, вы хотите сохранить свою историю, а? Это означает, что вы должны закрыть свой репозиторий. Для этого вам нужно будет снова добавить свой старый пульт.
После этого мы используем
git fetch
для извлечения оставшуюся историю со старого пульта (как предложено в этом ответе ).И теперь вы сможете войти в свой новый удаленный репозиторий.
Примечание . После отказа от клона вы, очевидно, можете снова удалить старый пульт.
источник
git fetch --unshallow
может потребоваться refspec для отмены только определенной ветви, а не всего репо. Например:git fetch --unshallow origin refs/heads/mydeepbranch:refs/remotes/origin/mydeepbranch
origin/master
редактирования вы получили на 20 коммитов больше, чемoldrepo/master
выclone --depth 1
, и с тех пор вы сделали 17 локальных коммитов, этого достаточно для васgit fetch --depth 37 origin refs/heads/master:refs/remotes/origin/master
(извинения за любую ошибку «за один раз»), и тогда вы можете делать этоgit push oldrepo master
без происшествий. (может потребоваться git 1.9.0 или новее).Если ваше репо есть
origin
, а оригинальное репоupstream
:источник
Другой вариант, если вы хотите сохранить репо как есть с новыми коммитами, которые вы добавили после мелкой, начальной фиксации, это: Поправьте этот коммит с помощью интерактивного перебазирования .
Начать интерактивную перебазировку, включая первый (корневой) коммит с
Измените
pick
исходную фиксациюedit
и сохраните и закройте файл.Если вы клонировали репо с большей глубиной, чем 1, вам может потребоваться сделать то же самое для всех этих коммитов. Или, в качестве альтернативы, выполнить
fixup
для всех них во время интерактивной перебазировки.Преобразуйте этот коммит в обычный, неглубокий коммит с
Это также изменит идентификатор фиксации и добавит вас в качестве соавтора к этой первоначальной фиксации.
Не забудьте закончить ребаз
источник
Если вы хотите продвинуть новый репо как есть, вы можете попробовать это:
old git folder
из вашего текущего репо,sudo rm -rf .git
git init
git remote add your-new-repo
источник
При получении --unshallow не работает. Должны быть проблемы с вашей веткой. Исправьте это с помощью следующей команды, прежде чем нажать на нее.
Делать это только с --unshallow не работает, так как есть проблема БЕЗОПАСНОСТИ .
источник