As GitHub private repositories have just become free, I’m jumping on the bandwagon and shipping over a few of the repos I have on Bitbucket to reduce the number of providers I store code with.
The option below uses the shell to migrate the repo, but you can also use the GitHub importer if you prefer an automated solution (you’ll just have to wait while it does it).
Four simple steps, using “add upstream”
1 Create a target repository on GitHub, either through the website, desktop app or shell
Use the tool of your choice to create a target repository on GitHub. Ensure you don’t initialize it with a README or you’ll need to resolve this later.
2 Clone the Bitbucket repository onto your PC
Clone the repo onto your local system. I’m on Windows today, so that’s:
D:\git>git clone https://[email protected]/withdave/wedding-website.git
3 Add the target GitHub repository as the upstream remote for the local copy you’ve just cloned from Bitbucket
D:\git\wedding-website>git remote add upstream https://github.com/withdave/wedding-website.git
4 Push the local copy (and if you have them, tags) to the target repository, and remove the Bitbucket copy
D:\git\wedding-website>git push upstream master
Optionally, if you have tags to push:
D:\git\wedding-website>git push --tags upstream
Check the status, and if successful remove the Bitbucket repository to tidy up!
Alteratively (1/2): Using the GitHub Importer
GitHub offers an importer for internet accessible repositories, via the plus at the top right (once logged in).
Simply specify the source URL and target repository name and it’ll prompt you for the relevant information.
Alternatively (2/2): Use “mirror”
The GitHub help suggests using –mirror with the following commands as detailed on their help site.
$ git clone --bare https://bitbucket.com/withdave/wedding-website.git
$ cd wedding-website.git git push --mirror https://github.com/withdave/wedding-website.git
$ cd ..
$ rm -rf wedding-website.git
This also maintains all branches and tags, but doesn’t update the upstream repository – it mirrors the repository, and then removes this from the local machine once complete (so you’d need to clone it again from the target repository to work with it).
- Using –mirror instead of upstream https://help.github.com/articles/importing-a-git-repository-using-the-command-line/
- Transfer repo from Bitbucket to Github https://gist.github.com/mandiwise/5954bbb2e95c011885ff
- GitHub Importer Help https://help.github.com/articles/importing-a-repository-with-github-importer