This python script will backup all of your Bitbucket repos (both mercurial and git) locally.
If the repository does not exist locally the repo will be cloned to the <local_backup_location>.
If the repo does exist locally an hg pull
will be run for mercurial repos,
and git remote update
will be run for git repos.
pip install -U https://github.com/samkuehn/bitbucket-backup/archive/master.zip
bitbucket-backup [-u <bitbucket_username>] [-p <bitbucket_password>] [-k <oauth_key>] [-s <oauth_secret>]
[-l <local_backup_location>] [-t <bitbucket_team>] [-a] [-v] [-q] [-c] [--http] [--skip-password] [--mirror]
[--prune] [--fetchlfs]
Username/password are needed to access the Bitbucket API to get a repo listing. At this time it is not used to do the clone/update. Clone/update requires that your SSH keys have been uploaded to Bitbucket.
You can backup a team's repositories instead of your own by supplying the optional -t
parameter
and entering the team slug (this is now called a "Workspace" by BitBucket).
If would like, you can use app passwords instead of your password used to login to Bitbucket. The password must have read repositories permission. https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html
You can use OAuth authentication if you do not want to use username/password. There are 4 steps to using OAuth.
- Create OAuth consumer keys here: https://bitbucket.org/account/user/{username}/api
- Make sure that your consumer has the following permissions:
- Account: Read
- Projects: Read
- Repositories: Read
- Specify the -k <oauth_key> -s <oauth_secret> flags
- Make sure requests-oauthlib is installed
pip install requests-oauthlib
You do need to have your SSH keys uploaded for the computer that you are running the backup on.
I am hosting this on GitHub because I believe it is superior for public repos (I understand the irony).