Skip to main content
Skip to content

Эта версия GitHub Enterprise Server будет прекращена 2026-10-14. Снятые релизы не поддерживаются. Исправления выпускаться не будут даже при критических проблемах безопасности. Для лучшей производительности, повышения безопасности и новых функций GitHub Enterprise Server см. Обзор процесса обновления. Для помощи с обновлением обращайтесь в GitHub Enterprise Support.

Перенос репозиториев между двумя предприятиями с данными

Расширение GEI можно использовать GitHub Enterprise Importer для GitHub CLI переноса репозиториев между двумя экземплярами GitHub Enterprise Cloud с размещением данных.

Сведения о миграции между предприятиями- резидентами данных

Миграции между двумя предприятиями, проживающими в данных, используют стандартный поток миграции архива GEI:

  1. GEI подключается к исходному GHE.com поддомену.
  2. GEI создает архив, содержащий данные репозитория.
  3. GEI отправляет архив в поддерживаемую службу хранилища миграции.
  4. GEI запускает миграцию репозитория в целевом GHE.com поддомене.
  5. Целевое Importer скачивание и обработка архива.

В этой миграции:

  • Источник — это GHE.com поддомен, напримерhttps://SOURCE_SUBDOMAIN.ghe.com.
  • Назначение — это другой GHE.com поддомен, напримерhttps://DESTINATION_SUBDOMAIN.ghe.com.
  • Исходные и целевые организации могут иметь разные имена.
  • Перенесенный репозиторий может иметь другое имя в целевой организации.

Конечные точки API источника и назначения должны быть указаны независимо. Не используйте URL-адрес целевого API для исходных операций.

Внимание

GitHub Enterprise Cloud с размещением данных URL-адреса API используют формат https://api.SUBDOMAIN.ghe.com. Это отличается от GitHub Enterprise Server URL-адреса API, который обычно использует формат https://HOSTNAME/api/v3.

Необходимые условия

Прежде чем начать:

  • Убедитесь, что исходный и целевой домены являются различными GHE.com поддоменами.
  • В исходных и конечных организациях убедитесь, что вы являетесь владельцем организации или получили роль миграции.
  • Создайте исходную personal access token (classic) организацию.
  • Создайте целевую personal access token (classic) организацию. Сведения о необходимых областях см. в разделе Управление доступом к миграции между продуктами GitHub.
  • Запустите пробную миграцию перед выполнением рабочей миграции.

Мы рекомендуем временно остановить работу в исходном репозитории во время миграции рабочей среды. GitHub Enterprise Importer не выполняет разностную миграцию, поэтому изменения, внесенные после запуска миграции, не включаются автоматически.

Сведения о перенесенных и известных ограничениях см. в разделе О миграциях между GitHub продуктами с GitHub Enterprise Importer.

GitHub CLI Установка и GEI

GitHub CLIУстановите и установите расширение GEI:

Bash
gh extension install github/gh-gei

Обновите расширение перед началом миграции:

Bash
gh extension upgrade github/gh-gei

Чтобы отобразить доступные параметры, выполните следующие действия.

Bash
gh gei migrate-repo --help

Настройка переменных среды

Задайте значения personal access tokens для обоих предприятий:

Bash
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN"
export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"

Задайте URL-адрес API для каждого GHE.com поддомена:

Bash
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com"
export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"

Замените и DESTINATION_SUBDOMAIN поддомены SOURCE_SUBDOMAIN исходного и целевого предприятия.

Рассмотрим пример.

Bash
export SOURCE_API_URL="https://api.source-example.ghe.com"
export TARGET_API_URL="https://api.destination-example.ghe.com"

Маркер GH_SOURCE_PAT используется для операций на стороне источника, включая создание архива. Маркер GH_PAT используется для операций на стороне назначения.

Настройка архивного хранилища BLOB-объектов

GitHub Enterprise Importer экспортирует каждый проект в архив, а затем передает архив в хранилище BLOB-объектов, которое GitHub может прочитать из него. При выполнении миграции вы выбираете серверную часть хранилища:

Вариант храненияКак выбрать егоNotes

GitHub-owned blob storage (рекомендуется) | --use-github-storage | Установка не требуется. GitHub удаляет архив автоматически после успешной миграции или семь дней после неудачной миграции. AWS S3 | --aws-bucket-name(с AWS_REGION``AWS_ACCESS_KEY_IDпеременными среды и AWS_SECRET_ACCESS_KEY переменными среды, а также при необходимости AWS_SESSION_TOKEN) | Вы владеете контейнером и его жизненным циклом. GitHub не удаляет архивы из хранилища. Хранилище BLOB-объектов Azure (Азур Блоб Сторадж) | AZURE_STORAGE_CONNECTION_STRING переменная среды (для одной migrate-repo команды можно использовать --azure-storage-connection-string) | Поддерживаются только строки подключения к ключу доступа к учетной записи хранения (а не SAS). GitHub не удаляет архивы из хранилища.

Перенос одного репозитория

Чтобы перенести один репозиторий, используйте gh gei migrate-repo команду:

Bash
gh gei migrate-repo \
  --github-source-org SOURCE_ORGANIZATION \
  --source-repo SOURCE_REPOSITORY \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org DESTINATION_ORGANIZATION \
  --target-repo DESTINATION_REPOSITORY \
  --target-api-url "$TARGET_API_URL" \
  --verbose

Замените заполнители следующими значениями:

PlaceholderDescription
SOURCE_ORGANIZATIONОрганизация, которая владеет репозиторием в исходном предприятии.
SOURCE_REPOSITORYИмя репозитория в исходной организации.
DESTINATION_ORGANIZATIONОрганизация, которая будет владеет перенесенным репозиторием в целевом предприятии.
DESTINATION_REPOSITORYИмя нового репозитория в целевой организации.

Рассмотрим пример.

Bash
gh gei migrate-repo \
  --github-source-org source-org \
  --source-repo example-repository \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org destination-org \
  --target-repo example-repository \
  --target-api-url "$TARGET_API_URL" \
  --verbose

Если не указано --target-repo, GEI использует имя исходного репозитория.

Необязательные аргументы

В команду миграции можно добавить следующие параметры:

ArgumentDescription
--target-repo-visibility TARGET-VISIBILITYЗадает видимость нового репозитория. Поддерживаемые значения — и .
--skip-releasesПереносит репозиторий без выпусков.
--queue-onlyОчереди миграции, не ожидая завершения миграции.
--verboseОтображает дополнительные выходные данные миграции.

Рассмотрим пример.

Bash
gh gei migrate-repo \
  --github-source-org source-org \
  --source-repo example-repository \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org destination-org \
  --target-repo example-repository \
  --target-api-url "$TARGET_API_URL" \
  --target-repo-visibility internal \
  --verbose

Перенос нескольких репозиториев

Для нескольких репозиториев используйте gh gei generate-script.

Bash
gh gei generate-script \
  --github-source-org SOURCE_ORGANIZATION \
  --github-target-org DESTINATION_ORGANIZATION \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL" \
  --output migration-script.ps1

Перед выполнением созданного скрипта просмотрите созданный скрипт. Можно сделать следующее:

  • Удалите репозитории, которые не следует перенести.
  • Изменение имен репозитория назначения.
  • Изменение видимости целевого репозитория.
  • Добавьте такие параметры, как --skip-releases.
  • Добавьте --download-migration-logs в журналы загрузки для каждой миграции.

Запустите созданный скрипт с помощью PowerShell:

Bash
pwsh ./migration-script.ps1

Проверка состояния миграции

Если вы запустили миграцию --queue-only, используйте идентификатор миграции, напечатанный GEI, чтобы отслеживать его:

Bash
gh gei wait-for-migration \
  --migration-id MIGRATION_ID \
  --target-api-url "$TARGET_API_URL" \
  --verbose

Замените MIGRATION_ID идентификатор, возвращенный gh gei migrate-repo.

Примечание.

Включите оба аргумента URL-адреса API при проверке. URL-адрес исходного API необходим для команд GEI, которые извлекают сведения о миграции на стороне источника и журналы.

Скачивание журналов миграции

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

Bash
gh gei download-logs \
  --migration-id MIGRATION_ID \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL"

Просмотрите журналы предупреждений и ошибок даже при успешном выполнении миграции.

Прерывание миграции

Чтобы прервать очередь или выполнить миграцию:

Bash
gh gei abort-migration \
  --migration-id MIGRATION_ID \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL"

Troubleshooting

Не удается достичь исходного клиента

Проверьте следующее:

  • --github-source-api-url имеет значение исходного поддомена.
  • URL-адрес использует формат https://api.SUBDOMAIN.ghe.com.
  • Исходный маркер хранится в GH_SOURCE_PAT.
  • Маркер имеет доступ к исходной организации и репозиторию.

Не удается достичь целевого клиента

Проверьте следующее:

  • --target-api-url имеет значение целевого поддомена.
  • URL-адрес использует формат https://api.SUBDOMAIN.ghe.com.
  • Конечный маркер хранится в GH_PAT.
  • У вас есть разрешение на создание репозиториев в целевой организации.

Миграция завершается сбоем при создании или отправке архива

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

  • Хранилище архива миграции настроено правильно.
  • Поставщик хранилища доступен для службы миграции.
  • Исходный репозиторий не изменяется во время миграции.
  • URL-адреса исходного и целевого API не были переключены.

Невозможно скачать журналы

При использовании download-logsили wait-for-migration``abort-migrationукажите одинаковые URL-адреса исходного и целевого API, используемые для запуска миграции:

--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"

Исходный URL-адрес отклонен

Убедитесь, что вы используете конечную точку GHE.com API поддомена, а не конечную точку GitHub Enterprise Server .

Использование:

https://api.SUBDOMAIN.ghe.com

Не используйте:

https://HOSTNAME/api/v3

Формат /api/v3 предназначен для GitHub Enterprise Server источников и не является правильным для GitHub Enterprise Cloud с размещением данныхформата.