The following script can download all git
repositories from all of the projects that you have access to on a privately hosted Bitbucket
server.
The execution work-flow of this script is as follows:
- It will ask for your username (the one you use to login on the
Bitbucket
server) - Then it will ask for your password, the password will not be visible on screen as you type because we disabled the
echo
functionality for that step. - Later, you will be prompted to provide the
URL
of the server, for this step be sure to define the protocol if it ishttp
orhttps
and the correct port number as well (e.g. https://bitbucket.bytefreaks.net:7990) - Finally, you will be requested to give the location to where the repositories should be cloned to.
- Then the script will connect to the server, get the list of projects that you have access to and for each project retrieve the repositories of the project and clone them in the designated folder.
[download id=”2637″]
#!/bin/bash echo -n "Username: "; read username; echo -n "Password: "; #Disabling echo, so that password will not be visible on screen read -s password #Enabling echo echo echo -n "Server (e.g https://repository.bytefreaks.net:7990): "; read server; echo -n "Location to clone repositories in: "; read location; mkdir -p "$location"; cd "$location"; #Getting all projects curl --user "$username:$password" "$server/rest/api/1.0/projects/" | \ grep -oP '"key":"\K\w+' | xargs -I {} -n 1 -I_project -- sh -c \ "curl --user \"$username:$password\" \"$server/rest/api/1.0/projects/_project/repos\" | grep -o '\"ssh:[^ ,]\+' | xargs -L1 git clone"; exit 0;
[download id=”2637″]
Notes for the future:
- Separate the cloned repositories per project
- Support for people that have hundreds of projects and/or hundreds of repositories using the paging functionality
This post is also available in: Greek
This script worked like magic and I’m planning to make it part of a cron job to take backup of all the projects-repos. Thank you so much.