Перейти к основному содержимому

Перенос git репозитория на другой сервер

·311 слов·2 минут
DevOps • Networks • Security • Infrastructure
Автор
DevOps • Networks • Security • Infrastructure
DevOps/Network/Infra Engineer, CyberSecurity Expert

Необходимо перенести git репозиторий с обычного git сервера на сервер GitLab.

Все работы можно выполнять через Git Bash, установленный на локальном компьютере c Windows.

Подготовка: запрет на запись в исходном репозитории
#

Перед началом переноса критически важно запретить любые изменения в исходном репозитории, чтобы гарантировать целостность данных и избежать потери коммитов, которые могут быть отправлены в процессе миграции.

Для этого на исходном сервере был настроен git-хук pre-receive, который блокирует все операции записи (git push), но при этом оставляет доступными операции чтения (git clone, git fetch).

Если нельзя настроить git-хук, можно органичить права на запись через файловую систему ОС.

Шаг 1: Клонирование репозитория с зеркалированием
#

Для переноса репозитория со всей историей, включая все ветки и теги, используем ключ --mirror. Это создает bare-репозиторий - точную копию удаленного репозитория без рабочей директории (это чистый репозиторий для сервера).

git clone --mirror git.asterisker.com:/var/git/MyProject/Informers.git

Шаг 2: Проверка настроек удаленного репозитория
#

Перед изменением удаленного URL убедимся, что текущие настройки корректны.

cd Informers.git
git remote show origin

Шаг 3: Удаление привязки к старому серверу
#

Отвязываем клонированный репозиторий от исходного сервера и проверяем, что удаление прошло успешно.

git remote rm origin
git remote show origin

Шаг 4: Добавление нового удаленного репозитория
#

Подключаем репозиторий к новому серверу и проверяем настройки нового удаленного репозитория.

git remote add origin https://gitlab.asterisker.com/myproject/informers.git
git remote show origin

Обратите внимание: HEAD branch: (unknown) - это нормально для нового репозитория. После первого пуша HEAD определится автоматически.

Шаг 5: Зеркальный пуш на новый сервер
#

Ключевой момент — зеркальный пуш (–mirror) переносит абсолютно всё:

  • Все ветки
  • Все теги
  • Все ссылки (refs)
  • Полную историю коммитов
git push --mirror

📌 Перенос успешно завершен!

Шаг 6: Проверка результатов (пост-миграция)
#

На новом сервере проверяем содержимое репозитория, должны отображаться все перенесенные ветки.

git ls-remote origin
git branch -a

Опционально. Обновление на рабочих местах разработчиков
#

После завершения миграции разработчики должны обновить URL удаленного репозитория.

git remote set-url origin https://gitlab.asterisker.com/myproject/informers.git

Related

Как изменить образ Docker
·561 слово·3 минут
Основные команды Docker
·1030 слов·5 минут
Lazydocker для Docker
·89 слов·1 минута