Comment sauvegarder tous ses dépôts Gitlab ?
Tags: gitlab, git, github, python
Published: 2023-10-21 09:39:07

## Objectif

L'objectif de cet article est d'expliquer comment sauvegarder l'ensemble de ses dépôts Gitlab avec un script utilitaire.

J'ai écris cet script dans le but de pouvoir :

+ récupérer tous mes dépôts Gitlab ainsi que toutes les branches associées,
+ récupérer tous les dépôts dont j'ai fait un fork ainsi qu'une mise à jour du fork avant récupération,
+ récupérer tous les dépots de mes organisations.

Quand le script est exécuté pour la première fois, il va récupérer tous les dépôts si les dépôts ont été précédemment récupérer il fera une mise à jour.

> **Important:**
> Les dépôts avec des espaces dans le nom seront récupérés avec remplacement de l'espace par **-**. Par exemple le dépôt avec nom **repo 1** sera récupérer avec le nom **repo-1**.

---

## Installation

Avant de commencer, vous devez installer **Python** et **Git** sur votre machine :

[Python >=3.9](https://www.python.org/downloads/)

[Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)

Après installation, vous pouvez cloner le script utilitaire à l'adresse suivante: [Gitlab Clone Repo](https://github.com/tisma95/gitlab-clone)

---

## Préparation

### Création des tokens

Allez sur votre compte **Gitlab** pour générer un token avec l'autorisation de la lecture uniquement comme ci-dessous :

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3r7qu1thmlcbka1x51u0.png)

> **Important:**
> Si vous voulez mettre à jour les dépôts fork, vous devez donner l'autorisation workflow pour permettre la mise à jour des dépôts. Activez l'option comme ci-dessous :

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j2n69fi022pbisswimwb.png)

### Initialisation des variables d'environnement

Dans le dossier du dépôt récupéré, créer le fichier **.env** avec le contenu suivant :

```yaml
# Domaine Gitlab
DOMAIN = gitlab.com
# Protocol du domaine par défaut https
PROTOCOL = https
# Copier et coller le token que vous avez généré précédemment ici
TOKEN = le_token_genere_ici
# Nom d'utiliateur gitlab
USERNAME = nom_d_utilisateur_gitlab
# Dossier là où sera sauvegardé les dépôts mettre le chemin absolu => exemple /home/toto ou C:\users\toto pour windows
FOLDER = chemin_absolu_du_dossier
```

Vous devez mettre les valeurs spécifiques comme l'exemple ci-dessous :

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qvvdcq38638pa40pg74w.png)

> **Information:**
> Lors de l'exécution, les dossiers de destination seront créés s'ils n'existent pas.

---

## Exécution

1. Lancez la commande suivante dans le dossier du projet (doit être lancé une fois) :

    ```cmd
        python -m venv env
    ```
    ou
    ```cmd
        python3 -m venv env
    ```
    ou pour ubuntu
    ```cmd
        virtualenv venv
    ```
    > **Information:**
    > Si vous rencontrer une erreur, veillez vérifier sur le lien suivant: https://gist.github.com/frfahim/73c0fad6350332cef7a653bcd762f08d

2. Lancez la commande suivante pour activer l'environnement :

    ```cmd
    source env/bin/activate
    ```
    ou sur windows
    ```cmd
        env\Scripts\activate.bat
    ```

3. Installez les modules à partir de la commande :

    ```cmd
        pip install -r requirements.txt
    ```

4. Lancez le script de sauvegarde avec la commande : `python main.py` or `python3 main.py`

Et voilà à la fin vous aurez tous les dépôts dans le dossier de destination.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/alm21zq0y2fd51cef45p.png)

> **Information:**
> Notez que pour chaque exécution, vous avez le journal généré dans le dossier du script utilitaire dans le sous-dossier **logs**.

Pour la version avec **Github** vous pouvez visiter [Sauvegarde Github](https://dev.to/isma/comment-sauvegarder-tous-ses-depots-github--c6e).