Необходимо перенести 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