Миграция проекта с github на bitbucket

Так уж сложилась жизнь что мне пришлось делать миграцию проекта с github на bitbucket. Причин может быть великое множество, например то, что проект github.com собирается покупать компания Microsoft (информация на июнь 2018 года, когда вы это читаете, то причина может быть уже не актуальной). Далее я предлагаю подробную инструкцию на тему «Миграция проекта с github на bitbucket», которую опробовал на своем репозитории.
Давайте посмотрим, какой репозиторий у нас есть прямо сейчас и что нам о нем известно:
$ git remote -v origin https://github.com/laravel/homestead.git (fetch) origin https://github.com/laravel/homestead.git (push) |
Команда git remote -v говорит нам, что для fetch у нас есть репозиторий под названием origin, а так же для push у нас есть репозиторий origin. После названия репозитория идет адрес.
Команда git remote достаточно гибкая и позволяет получать более детальную информацию по репозиторию. Например, мы можем попросить наш локальный гит сказать нам, какие репозитории у него вообще есть:
$ git remote show origin |
Слово origin ничем не отличается от любых других слов. Так исторически сложилось что разработчики гита использовали это слово (original). На самом деле origin играет роль синонима (alias) для моего репозитория https://github.com/laravel/homestead.git. Когда вы пишите origin вы подразумеваете git@github.com:laravel/homestead.git.
Давайте переименуем origin во что-то еще. Например:
$ git remote rename origin github |
Обратите внимание, мы опять использовали команду git remote. В качестве аргументов мы попросили переименовать (rename) origin в github.
Давайте еще раз посмотрим, какие репозитории у нас есть, после переименования:
$ git remote show github |
Отлично. Теперь давайте добавим в наш гит сведения о еще одном репозитории:
$ git remote add origin https://nickname@bitbucket.org/nickname/laravel.git |
Вместо nickname необходимо подставить свой ник на bitbucket.org.
Так как origin мы переименовали в github, мы можем использовать это слово для названия другого репозитория.
Мы добавили origin по адресу git@bitbucket.org:nickname/laravel.git. Хорошо, что сейчас мы имеем:
$ git remote show github origin |
Давайте посмотрим на новый origin внимательнее используя команду git remote с аргументом show:
$ git remote show origin * remote origin Fetch URL: https://nickname@bitbucket.org/nickname/laravel.git Push URL: https://nickname@bitbucket.org/nickname/laravel.git HEAD branch: (unknown) |
Теперь нужно сделать:
git push -u origin master |
чтобы закинуть новую ветку в мастер.
Теперь наш git, по умолчанию использует другой origin. Отлично, у нас теперь 2 репозитория. Если мы будем писать команды типа git push или git pull мы будем использовать origin. Если вдруг нам понадобится работать с github, то теперь мы должны указывать это явно. Например
$ git pull github |
Для тех, кто не хочет разбираться с командами git или считает, что это не интересно, откройте в корне проекта файл .git/config и найдите там секцию [remote «origin»], как в примере ниже:
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = git@github.com:laravel/homestead.git fetch = +refs/heads/:refs/remotes/origin/ |
Измените адрес с git@github.com:laravel/homestead.git на git@bitbucket.org:nickname/laravel.git.
После того, как вы смените origin, вам 1 раз, в каждой своей ветке, которую вы хотите переместить в новый origin, необходимо выполнить push с дополнительным аргументом:
$ git push --set-upstream origin <название-текущей-вашей-ветки> |
Аргумент —set-upstream скажет вашему гиту, что отныне, у вашей ветки новый апстрим. После этого, можно удалять из своего гита сведения о старом репозитории (если вы использовали команду git remote вместо редактирования конфига):
$ git remote rm github |
Данная инструкция поможет не только, если вам необходима миграция проекта с github на bitbucket, но и для миграции проекта с github на gitlab и в любую другую сторону.
Если есть какие-то дополнения, то прошу в комментарии.