Перемещение репозитория git на другой сервер
Вопрос
У меня есть git-клон / репозиторий на сервере разработки, но сейчас я перехожу на другой.Я не хочу передавать все мои локальные ветки и изменения в основной репозиторий, так как же я могу сделать точную копию всего, что есть на oldserver, на newserver?
Я пытался oldserver:~$ scp -rp project newserver:~/project
но тогда я просто получаю множество ошибок "typechange" при попытке что-либо сделать на newserver.
Кто-то что-то говорил о x-режимах, но как я могу сохранить это при перемещении файлов между серверами?
Решение
Если вы хотите git-решение, попробуйте
git clone --mirror <oldurl> <newurl>
хотя это только для голых репозиториев.
Если это не пустое хранилище, вы также можете сделать нормальный клон, а затем сделать что-то вроде этого:
git fetch origin
git branch -r | grep '^ *origin/[^ ]*
Средний шаг, конечно, может быть выполнен 5000 различными способами, но это один из них! (обратите внимание, что строка продолжения \ не нужна после канала в bash - он знает, что ему нужно больше ввода)
Наконец, я бы предложил использовать rsync вместо scp (возможно, с опциями -avz?), если вы хотите напрямую копировать. (Что это за ошибки при смене типа?)
|
while read rb; do git branch --no-track ${rb#*/} $rb; done
git remote rm origin
Средний шаг, конечно, может быть выполнен 5000 различными способами, но это один из них! (обратите внимание, что строка продолжения \ не нужна после канала в bash - он знает, что ему нужно больше ввода)
Наконец, я бы предложил использовать rsync вместо scp (возможно, с опциями -avz?), если вы хотите напрямую копировать. (Что это за ошибки при смене типа?)
Другие советы
Я действительно делал это, и все, что я сделал, - это сначала загрузил репозиторий и скопировал его заново.Я бы подумал, что scp -rp тоже сработал.
"Изменение типа" обычно относится к таким вещам, как превращение символической ссылки в файл или наоборот.Работают ли два сервера под управлением одной и той же операционной системы?
Возможно, вы также захотите попробовать простое тупое решение - не беспокойтесь о том, как там произошли смены типов, но позвольте git исправить их командой reset:
git reset --hard HEAD
Это имеет смысл, только если (1) все проблемы относятся к извлеченным файлам (а не к самой структуре репозитория) и (2) вы не внесли никаких изменений в newserver , которые вам нужно сохранить.
Учитывая эти предостережения, это сработало для меня, когда я обнаружил, что сталкиваюсь с той же проблемой, и не требует от вас думать о внутренностях git или о том, насколько хорошо ваш процесс передачи файлов сохраняет атрибуты.