> For the complete documentation index, see [llms.txt](https://cleyrop.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cleyrop.gitbook.io/docs/v4.7/la-fabrique/depots-git.md).

# Dépôts Git

Hébergez le code de vos Apps et Tools sur la plateforme ou connectez vos dépôts GitLab existants pour construire vos images.

Un dépôt Git est la source du code d'une App ou d'un Tool. La Fabrique en connaît deux types :

* le **dépôt interne**, hébergé directement sur la plateforme Cleyrop, sans repository externe ni identifiants à configurer ;
* le **dépôt externe**, un repository GitLab existant, que la plateforme lit avec sa clé de déploiement.

Un dépôt peut alimenter plusieurs Apps et existe indépendamment d'elles. Les dépôts internes se gèrent depuis **La Fabrique**, onglet **Dépôts Git** ; les dépôts externes se déclarent au moment de créer une image.

<figure><img src="https://content.gitbook.com/content/Lve2h8CdCFZ7rIwwaoUU/blobs/Cx6DswrPyzn2rfFMNFV1/4.7-depots-git-liste.png" alt="Onglet Dépôts Git de La Fabrique : liste des dépôts internes avec leur responsable et le nombre d&#x27;Apps liées"><figcaption></figcaption></figure>

***

## Comprendre les droits sur un dépôt interne

| Rôle                     | Droits                                                                                                                                               |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Responsable du dépôt** | Modifier, transférer et supprimer le dépôt ; éditer, importer et supprimer des fichiers ; créer des branches ; cloner et pousser depuis son DevSpace |
| **Autres utilisateurs**  | Consultation en lecture seule des dépôts liés à leurs Apps. Les **Platform Managers** voient tous les dépôts.                                        |

{% hint style="warning" %}
Être responsable d'une App n'ouvre pas les droits sur son dépôt : c'est le **responsable du dépôt** qui compte. Pour donner la main à un collègue, [transférez-lui le dépôt](#transferer-modifier-ou-supprimer-un-depot).
{% endhint %}

## Créer un dépôt interne

1. Accédez à **La Fabrique**, onglet **Dépôts Git**.
2. Cliquez sur **Créer un dépôt**.
3. Renseignez le **Nom** (lettres, chiffres, espaces, points et tirets, 100 caractères maximum). L'**Identifiant** est généré automatiquement à partir du nom : c'est le nom technique du dépôt, il ne changera plus, même si vous renommez le dépôt.
4. Ajoutez une **Description** (markdown supporté), puis cliquez sur **Créer**.

<figure><img src="https://content.gitbook.com/content/Lve2h8CdCFZ7rIwwaoUU/blobs/gEcLhKr08gJZFrIT7axN/4.7-depots-git-creation.png" alt="Formulaire Création d&#x27;un dépôt : nom, identifiant généré automatiquement et description"><figcaption></figcaption></figure>

Vous êtes redirigé vers la fiche du dépôt et vous en êtes le **responsable**. Un fichier `README.md` est créé automatiquement sur la branche `main` ; il rappelle les commandes de clonage.

{% hint style="info" %}
Le nom et l'identifiant sont uniques sur la plateforme : si l'un des deux est déjà pris, le message **Ce nom est déjà utilisé** s'affiche. Les dépôts internes sont toujours privés.
{% endhint %}

## Explorer la fiche d'un dépôt

L'en-tête de la fiche affiche le nom du dépôt, son **Lien** (l'URL de clonage, avec un bouton de copie), son **Responsable**, le nombre d'**Apps** qui l'utilisent et sa date de création. Le responsable dispose des actions **Transférer**, **Modifier** et **Supprimer**.

<figure><img src="https://content.gitbook.com/content/Lve2h8CdCFZ7rIwwaoUU/blobs/5JZUiMek0ED2QAfuNFHw/4.7-depots-git-fiche.png" alt="Fiche d&#x27;un dépôt interne, onglet Informations : lien de clonage, responsable, branches et Apps liées"><figcaption></figcaption></figure>

* **Informations** : la description, le nombre de branches et les Apps liées, avec un lien vers chacune d'elles.
* **Fichiers** : l'arborescence de la branche sélectionnée, le dernier commit et le contenu des fichiers. Un fichier markdown s'ouvre en **Prévisualisation** ; le bouton **Code** affiche sa source. Les fichiers bureautiques, PDF, archives et médias ne sont pas affichables.

<figure><img src="https://content.gitbook.com/content/Lve2h8CdCFZ7rIwwaoUU/blobs/cBWwygmGo2Hv09UEsmlp/4.7-depots-git-fichiers.png" alt="Onglet Fichiers d&#x27;un dépôt : sélecteur de branche, boutons Importer et Créer une branche, dernier commit et arborescence"><figcaption></figcaption></figure>

## Gérer les fichiers d'un dépôt

Depuis l'onglet **Fichiers**, le responsable peut modifier le dépôt directement depuis l'interface. Chaque action crée un commit à son nom sur la branche sélectionnée.

**Éditer un fichier**

1. Sélectionnez la branche, puis ouvrez le fichier.
2. Cliquez sur **Modifier** et changez le contenu. Vous pouvez aussi renommer le fichier, dans le même dossier.
3. Complétez le **Message** de commit (pré-rempli), puis cliquez sur **Sauvegarder**.

**Importer un fichier**

1. Placez-vous sur la branche et dans le dossier de destination, puis cliquez sur **Importer**.
2. Sélectionnez ou glissez-déposez le fichier : un seul fichier par import, **100 Mo maximum**.
3. Complétez le **Message** de commit, puis cliquez sur **Envoyer**.

Un fichier portant le même nom au même emplacement est refusé : supprimez ou renommez l'ancien avant d'importer.

**Supprimer un fichier**

1. Ouvrez le fichier, puis cliquez sur **Supprimer**.
2. Saisissez le nom du fichier pour confirmer, puis cliquez sur **Supprimer**.

**Créer une branche**

1. Cliquez sur **Créer une branche**.
2. Renseignez le **Nom** (lettres, chiffres et caractères `_ - . /`) et choisissez la branche source dans **Créer depuis**.
3. Cliquez sur **Créer** : la nouvelle branche est sélectionnée.

<figure><img src="https://content.gitbook.com/content/Lve2h8CdCFZ7rIwwaoUU/blobs/7AppS2xbyMpqKzwDg7LJ/4.7-depots-git-branche.png" alt="Modale Création d&#x27;une branche : nom et branche source"><figcaption></figcaption></figure>

{% hint style="info" %}
La création d'une branche n'impacte aucune App existante. La suppression d'une branche et la création de tags ne sont pas disponibles depuis l'interface : effectuez-les depuis votre DevSpace.
{% endhint %}

## Travailler sur un dépôt interne depuis un DevSpace

Pour des modifications plus larges qu'un fichier, clonez le dépôt dans votre [DevSpace](/docs/v4.7/la-fabrique/devspace.md). Aucune Deploy Key n'est à ajouter : la clé SSH de votre DevSpace est enregistrée automatiquement sur les dépôts dont vous êtes responsable, et l'alias `cleyrop` est préconfiguré dans le DevSpace.

1. Depuis la fiche du dépôt, copiez le **Lien**, de la forme `git@cleyrop:<identifiant>.git`.
2. Depuis le terminal de votre DevSpace :

```bash
cd /home/cleyrop/projects
git clone git@cleyrop:<identifiant>.git
cd <identifiant>
# … modifications, puis :
git add . && git commit -m "Ma modification" && git push origin main
```

{% hint style="warning" %}
Le clonage et le push sont réservés au **responsable du dépôt**, depuis son DevSpace. La clé SSH de votre appareil, ajoutée dans votre **Espace personnel**, sert à vous connecter au DevSpace ; elle ne donne pas accès aux dépôts internes.
{% endhint %}

## Transférer, modifier ou supprimer un dépôt

Ces actions sont réservées au responsable du dépôt, depuis la liste des dépôts ou la fiche du dépôt.

* **Modifier** : changez le nom ou la description. L'identifiant, et donc l'URL de clonage, restent inchangés.
* **Transférer** : choisissez le **Nouveau responsable** parmi les utilisateurs de la plateforme, puis confirmez. Le transfert est **définitif** : seul le nouveau responsable conserve les droits, dans l'interface comme en Git depuis son DevSpace.
* **Supprimer** : saisissez le nom du dépôt pour confirmer. La suppression est **irréversible** et efface le dépôt et son historique. Les Apps qui l'utilisaient restent déployées, mais leurs images ne peuvent plus être reconstruites tant qu'un autre dépôt ne leur est pas associé ; le dépôt apparaît comme **(supprimé)** dans leur registre.

{% hint style="info" %}
Lorsqu'un administrateur désactive un utilisateur, il désigne un **Nouveau responsable des apps et dépôts Git** : les dépôts internes de l'utilisateur lui sont transférés.
{% endhint %}

***

## Connecter un dépôt externe

Un dépôt externe se déclare depuis la création d'une image, dans la section **Repository** du formulaire (voir [Utiliser un dépôt dans une App](#utiliser-un-depot-dans-une-app)). La plateforme y accède en **lecture seule**.

### Repository privé (GitLab)

**Prérequis** : un repository GitLab contenant votre code source et un Dockerfile.

1. Cliquez sur **Ajouter**, puis choisissez le type **Externe**.
2. Saisissez l'**URL SSH** du repository (ex. `git@gitlab.com:mon-org/mon-repo.git`). La connexion est testée automatiquement.
3. Suivez le guide affiché sous le champ : dans GitLab, ouvrez **Settings > Repository > Deploy Keys**, cliquez sur **Add new key**, nommez la clé, puis collez la clé publique Cleyrop obtenue avec le bouton **Copier la clé SSH**.
4. Cliquez sur **Tester la connexion**. Si le test réussit, cliquez sur **Ajouter**.

{% hint style="info" %}
Si GitLab affiche « Fingerprint sha256 has already been taken », la clé Cleyrop est déjà connue de votre instance GitLab : retrouvez-la dans **Privately accessible deploy keys** et activez-la sur votre repository.

La clé publique Cleyrop est aussi consultable à tout moment depuis le menu utilisateur, entrée **Clés SSH**, section **Clé SSH - La Fabrique**.
{% endhint %}

### Repository public

Aucune Deploy Key n'est nécessaire.

1. Cliquez sur **Ajouter**, puis choisissez le type **Externe**.
2. Saisissez l'**URL HTTPS** du repository (ex. `https://gitlab.com/mon-org/mon-repo.git`).
3. Si le test de connexion réussit, cliquez sur **Ajouter**.

### Gestion des erreurs

| Erreur                                                       | Cause                           | Solution                                                   |
| ------------------------------------------------------------ | ------------------------------- | ---------------------------------------------------------- |
| « Nous ne sommes pas parvenus à accéder à votre repository » | Clé SSH non ajoutée ou invalide | Vérifiez que la Deploy Key est bien configurée dans GitLab |
| « Ce format n'est pas accepté »                              | URL mal formée                  | Utilisez une URL SSH (`git@…`) ou HTTPS complète           |
| « Ce repository ne contient aucun tag »                      | Repository sans tags Git        | Créez au moins un tag ou utilisez une branche              |

***

## Utiliser un dépôt dans une App

Un dépôt, interne ou externe, sert de source de build pour les images d'une App ou d'un Tool.

1. Depuis la fiche de votre App, ouvrez l'onglet **Registre interne** et cliquez sur **Créer une image**.
2. Dans la section **Repository**, sélectionnez un dépôt déjà lié à l'App, ou cliquez sur **Ajouter** :
   * type **Interne** : choisissez un dépôt dans la liste. Seuls les dépôts dont vous êtes responsable sont proposés ; le bouton **Créer un dépôt** permet d'en créer un nouveau.
   * type **Externe** : déclarez le repository comme décrit ci-dessus.
3. Poursuivez la configuration de l'image (Dockerfile, branche ou tag, version) : voir [Gérer les images](/docs/v4.7/la-fabrique/gerer-les-images.md#creer-et-builder-une-image).

<figure><img src="https://content.gitbook.com/content/Lve2h8CdCFZ7rIwwaoUU/blobs/ufjFMFlPvof6m3rm24jd/4.7-depots-git-ajout-modale.png" alt="Modale Ajout d&#x27;un dépôt : type Interne ou Externe, puis choix du dépôt parmi ceux dont vous êtes responsable"><figcaption></figcaption></figure>

Un même dépôt peut être lié à plusieurs Apps. L'onglet **Dépôts Git liés** de la fiche d'une App liste les dépôts utilisés comme source de ses images.

***

## Bonnes pratiques

* Réservez l'édition en ligne aux petits correctifs ; pour un développement suivi, travaillez depuis votre DevSpace.
* Gardez `main` stable : développez sur une branche dédiée et utilisez des tags Git pour les images de production.
* Transférez vos dépôts avant de quitter un projet, afin que les Apps qui en dépendent restent reconstructibles.
