{{indexmenu_n>15}}
# Cloner tous les dépôts Gitlab d'un groupe
## Contexte
Depuis la séparation des la configuration des services en différents dépôts, il est difficile d'effectuer des modifications qui impactent tous les services (exemple : changement du format de fichier Compose). On voudrait bien, par exemple, récupérer tous les dépôts des services d'un coup.
Pour rappel, le groupe Gitlab avec les services est ici : https://gitlab.utc.fr/picasoft/projets/services
Git ne permet pas de faire ce genre d'opérations, puisque les *groupes* sont un concept de Gitlab.
On va utiliser un outil très sympa : [gitlabber](https://github.com/ezbz/gitlabber). `gitlabber` permet aussi de tirer toutes les modifications des dépôts d'un groupe d'un seul coup.
Il existe aussi [ghorg](https://github.com/gabrie30/ghorg), orienté GitHub et Gitlab, mais qui effectue des opérations dangereuses au pull, comme `git clean`, qui efface tous les fichiers non-tracké. Ce n'est pas le bon cas d'usage pour nous.
## Préparation
Installation `gitlabber` :
```shell
pip install gitlabber
```
Créer un [jeton d'accès Gitlab](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token) **en lecture seule**.
Le plus rapide est de passer par ce lien : https://gitlab.utc.fr/-/profile/personal_access_tokens. Les permissions à accorder sont `read_api` et `read_repository`. Tu peux donner un nom parlant, comme `gitlabber`, pour te souvenir.
Une fois le jeton créé, ajouter le dans tes mots de passe: il ne sera plus jamais affiché. :-p
## Utilisation
Exemple pour cloner tout l'arbre des services :
```sh
gitlabber -t 'ton jeton' -i '/Picasoft/Technique/Services**' -u https://gitlab.utc.fr/ .
```
Un nouvel appel de la commande du même endroit fera un `git pull`.
Le chemin utilisé pour indiquer le groupe à cloner utilise le nom du groupe, pas son URL. L'option `-p`, utilisée sans le `-i`, permet d'afficher un arbre de l'ensemble des groupes auxquels tu appartiens.