Simple tool to list all your bitbucket workspaces and clone (all) repositories associated with these workspaces.
- You need to know your Bitbucket account email. Can be found at https://bitbucket.org/account/settings/email/.
- You need to create an API token here https://id.atlassian.com/manage-profile/security/api-tokens with read permissions for account, workspace membership and repositories.
| Command | Scopes |
|---|---|
| workspace | read:user:bitbucket, read:workspace:bitbucket |
| clone | read:user:bitbucket, read:workspace:bitbucket, read:repository:bitbucket |
| project | read:user:bitbucket, read:workspace:bitbucket, read:project:bitbucket |
Install bucketcloner either by cloning this repository and running pip install . or by installing it via pip install bucketcloner. Minimum required python version is 3.9.
Alternatively, you can run bucketcloner using uvx: uvx bucketcloner --help
Authentication for cloning the repository can be done via https and the API token or using an SSH key. IMPORTANT: When using ssh make sure you have added the bitbucket server ssh fingerprint to the known hosts, otherwise the command will fail. Run git clone git@bitbucket.org:... once manually to make sure the key is added.
You can pass your ssh key with --ssh-key, otherwise the users default ssh key will be used.
bucketcloner -e <email> -t <api_token> workspaceThis lists all workspaces, including your personal workspace, where you have access.
You can clone all repositories of all workspaces by simply calling
bucketcloner -e <email> -t <api_token> cloneThis clones all repositories of all workspaces into the folders workspace/repository relative to the current directory.
To select specific workspace(s), add the -w option with workspace slug names separated by commas
bucketcloner -e <email> -t <api_token> -w workspace1,workspace2 cloneAll existing repositories in the folders will be deleted and cloned again. To just skip existing repositories, add --skip-existing flag.
bucketcloner -e <email> -t <api_token> -w workspace1,workspace2 --skip-existing cloneClone all repos from all workspaces with project PRO1 into /tmp with folder structure workspace/project/repo.
bucketcloner -e <email> -t <api_token> --project PRO1 --base-folder /tmp --project-folder cloneClone all repos using an ssh key
bucketcloner -e <email> -t <api_token> --base-folder /tmp --auth-mode ssh --ssh-key "/my/id_rsa" cloneList all projects in all workspaces
bucketcloner -e <email> -t <api_token> projectThe example.ipynb includes an example how to read the workspaces and download the repositories from within python.