Предположим, у вас есть репозиторий на GitLab. Это может быть как основной сайт gitlab.com, так и любой сервер с развернутым GitLab. Благодаря, что такие git хранилища как Github, GitLab или Bitbacket используют git протокол - принцип работы с ними одинаковый. А значит использую консольные команды гита возможно сделать любые действия и они будут работать одинаково. Этим и воспользуемся.
Перенос используя git команды
Самый надежный вариант переноса репозитория основан на клонировании репозитория и далее загрузку в новый репозиторий. Хоть и в некоторых хранилищах возможно импортировать репозитории из других систем, но с приватными репозиториями могут возникнуть сложности. Поэтому перенос через локальную копию самый универсальный.
Рекомендуется использовать SSH доступ к репозиторию, как это сделать в статье “Переходим с HTTPS на SSH доступ в GitHub”
Клонируйте репозиторий с GitLab
git clone git@gitlab.com:shibkov.k/sjc_platform.git
Копировать можно как через https, так и через ssh. Это не имеет значения. Важно, чтобы в
директории где выполняете команду, не было папки sjc_platform
- а это будет ошибка.
- Переходите в папку с клонированным репозиторием
В данном случае это sjc_platform
cd sjc_platform
И давайте посмотрим с какими удаленными репозиториями связан ваш локальный репозиторий:
git remote -v
Пример вывода:
> git remote -v
origin git@gitlab.com:shibkov.k/sjc_platform.git (fetch)
origin git@gitlab.com:shibkov.k/sjc_platform.git (push)
Есть две записи, но репозиторий один - origin
, и он ведет на GitLab. Этот репозиторий используется
для получения обновлений и для отправки кода в GitLab по умолчанию при командах push
.
Зачем нужна команда fetch
-
можете прочитать в коротких заметках.
В итоге мы добавим в список репозиторий Github и сможем запушить весь репозиторий в него. И для начала, нам надо создать такое репозиторий.
Создайте репозиторий на Github
Заходите в Github, начните процесс создания нового репозитория. Важно создать полностью чистый репозиторий, без содержимого.
Перед созданием, вам предложат сделать первоначальные настройки, на что обратить внимание:
- имя репозитория - можете указать точно такое же или на свой вкус.
- публичный или приватный - значения не имеет
- не создавайте README файл
- не добавляйте gitignore файл
- не выбирайте лицензию
Пример на скриншоте:
После создания вам откроется по-сути эта инструкция, для загрузки существующего репозитория, но некоторые команды надо изменить. Все равно проведу вас до конца 😊
Загрузка локального репозитория на Github
Мы используем сценарий “push an existing repository from the command line”.
Все команды выполняйте в консоли, находясь в корне директории склонированного репозитория:
- Добавляем новый remote (связь с удаленным репозиторием)
Тут важно изменить имя origin
, например на github
. Так как origin
remote уже у нас есть, второй
не даст добавить.
git remote add github git@github.com:sendelufa/sjc_platform.git
После, проверьте что успешно добавился новый remote:
> git remote -v
github git@github.com:sendelufa/sjc_platform.git (fetch)
github git@github.com:sendelufa/sjc_platform.git (push)
origin git@gitlab.com:shibkov.k/sjc_platform.git (fetch)
origin git@gitlab.com:shibkov.k/sjc_platform.git (push)
Отлично, мы убедились - новый remote добавился.
- В инструкции предлагается изменить существующую ветку на main.
Команда git branch -M main
или полный формат git branch --move --force
переименовывает текущую ветку в main. А ветку у нас уже точно есть, менять
нет никакой необходимости, пропускаем.
- Загружаем
Если вы хотите чтобы ветки в вашем репозитории и на удаленном не изменили название, посмотрите заранее как называется у вас текущая ветка:
git branch --show-current
Пример вывода, у меня master ветка:
> git branch --show-current
master
Теперь используем команду отправки ветки на удаленный репозиторий:
git push -u github master
После -u указываете имя remote, у нас это github
и после ветку которая будет
создана в удаленном репозитории и будет в нее загружена текущая локальная ветка,
у нас это master
.
Это снова краткая запись, без сокращений это git push --set-upstream github master
.
Пример, результата выполнения команды:
> git push --set-upstream github master
Enumerating objects: 428, done.
Counting objects: 100% (428/428), done.
Delta compression using up to 8 threads
Compressing objects: 100% (176/176), done.
Writing objects: 100% (428/428), 115.22 KiB | 776.00 KiB/s, done.
Total 428 (delta 158), reused 428 (delta 158), pack-reused 0
remote: Resolving deltas: 100% (158/158), done.
To github.com:sendelufa/sjc_platform.git
* [new branch] master -> master
branch 'master' set up to track 'github/master'.
🎆 Это явный успех, теперь вы можете открыть страницу репозитория на Github и убедиться - он уже заполнен всей вашей историей коммитов.
У меня много веток! Как быть?
Если вам надо загрузить сразу все ветки, то вместо команды git push --set-upstream github master
используйте:
git push --all github
⭐ Бонус
Если вы захотите удалить remote гитлаба, то вот вам команда для нашего примера:
git remote remove origin
и у вас останется только один remote
> git remote -v
github git@github.com:sendelufa/sjc_platform.git (fetch)
github git@github.com:sendelufa/sjc_platform.git (push)
ну и последнее, если вы хотите переименовать github remote в origin:
git remote rename github origin
После rename указывайте название существующего remote и после новое имя.
Таким же образом можно переносить и с Github на Gitlab или в любое другое git хранилище. Удачного кодинга!