# 6. Configurer GIT

Cette étape est utile pour les développeurs ou pour les administrateurs qui souhaite utiliser des projets provenant de repository Git (Github, Gitlab, etc..).  
Pour les autres utilisateurs il n'est pas nécessaire de réaliser cette étape.

# Mise en place de GIT

### Installation de GIT

```shell
sudo apt install git
```

### Configurer GIT

Pour configurer Git il suffit de paramétrer un utilisateur avec les 2 lignes de commandes suivantes.

```shell
git config --global user.name "Sammy"
git config --global user.email "sammy@domain.com"
```

Les informations que vous saisissez sont stockées dans votre fichier de configuration Git, que vous pouvez éventuellement modifier à la main avec un éditeur de texte comme celui-ci :

```shell
nano ~/.gitconfig
```

### Lister les configurations

Pour afficher toutes les configurations git existantes sur le serveur :

```shell
git config --list
```

# Les commandes GIT

### Liste des commandes GIT utiles

#### Commande sur un répertoire de travail

Lister tous les commit existant :

```shell
git log --oneline
```

Pour avoir plus d'information :

```shell
git log
```

<span style="font-weight: 400;">Pour voir l’état du répertoire, entre autre termes les fichiers qui sont supprimé, modifié ou a ajouter :</span>

```shell
git status
```

# Migration d'un Repository Git vers Gitea

Nous allons partir du principe que nous avons un repository Git existant avec des branches, commits etc..

Notre repository est "DemoRepoGit" se trouvant sur un serveur Linux via le chemin d'accès suivant `/path/to/git/repo/DemoRepoGit.git`.

<p class="callout info">Avant de commencer la migration il est nécessaire de créer le repository <span style="text-decoration: underline;">**DemoRepoGit**</span> vide sur Gitea.</p>

##### Préparation de l'environnement de migration

Pour ce faire nous allons d'abord créer un clone du repo afin d'éviter de perdre les données en cas de mauvaise manipulation lors de la migration.

Se placer dans un dossier temporaire, par exemple `/tmp`.

##### Cloner le repo dans l'environnement de migration

`--mirror` = branches + tags + refs → migration complète

```bash
# Cloner en mirror (IMPORTANT)
git clone --mirror /path/to/git/repo/DemoRepoGit.git
```

Puis se placer dans le repo cloné (`cd DemoRepoGit.git`).

<p class="callout warning">Il est possible que la commande retourne l'erreur `fatal : propriétaire douteux détecté dans le dépôt...`. Cette erreur corresponds à un mécanisme de sécurité récent de Git.   
Maintenant Git bloque l'accès au repo si on est "root" et qu'il appartient à un autre utilisateur.  
Pour corriger exécuter la commande suivante : `<span class="ͼs">git</span> config <span class="ͼu">--global</span> <span class="ͼu">--add</span> safe.directory /path/to/git/repo/DemoRepoGit.git`.</p>

##### Ajouter le nouveau remote

L'ajout du nouveau remote permet de configurer la destination lors de l'envoi des commits, tags...

```bash
# Ajouter le remote Gitea
git remote add gitea http://gitea:3000/USER/DemoRepoGit.git
```

##### Envoi du nouveau repo 

```bash
# Push complet
git push --mirror gitea
```

Attention si il y avait des Hooks Git il faudra les reconfigurer.

# Mise en place clé SSH Git

##### Prérequis 

Si Gestionnaire de repository Self hosted (Gitea) :

- Activer le port sur le service Gitea (2222-&gt;22)
- Ouvrir le par-feu serveur et du routeur (Box internet)
- Activer le service SSH dans le app.ini du service

##### Générer la clé de sécurité

Sur la machine local exécuter la commande suivante pour générer la clé SSH :

```bash
ssh-keygen -t ed25519 -C "your_email@example.com"
```

Il n'est pas nécessaire de mettre une passphrase.

##### Ajouter la clé au compte

Pour ajouter la nouvelle clé au compte Gitea il faut récupérer le contenu de la clé publique :

```bash
cat ~/.ssh/id_ed25519.pub
```

Le contenu de la clé ressemble à ceci :

```bash
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHpRFB++5649q68s47audlJzpfdVUfAL3qJhxvaKkKSDHCsq your_email@example.com
```

Puis sélectionner le contenu dans le presse papier.

Ouvrir les paramètres du compte puis se rendre dans l'onglet "Clés SSH / GPG".

Ajouter une nouvelle clé, donner un nom à la clé, puis coller le contenu du presse papier.

##### Tester la connexion avec la nouvelle clé

Pour tester la connexion il faut exécuter la commande suivante :

```bash
ssh -T -p <port> -i ~/.ssh/id_ed25519 git@domain.name
```

Si la connexion est time-out essayer de se connecter en local depuis le serveur hébergeant le service : `ssh -T -p <port> <a href="mailto:git@localhost">git@localhost</a>` Si la connexion réussi c'est que le problème provient d'un par-feu, sinon c'est un problème de configuration du service.

##### Cloner le repository

Une fois la clé ajouté au compte Git il va être possible de cloner le repository via l'url SSH :

```bash
# Cloner un repo
git clone ssh://git@<domaine.name>:<port>/<user>/DemoRepoGit.git
# Par exemple : git clone ssh://git@git.galaxy.com:2222/john/monprojet.git

# Ajouter un nouvel origin si repo déjà existant
git remote add origin ssh://git@<domaine.name>:<port>/<user>/DemoRepoGit.git
```

Il est toujours possible de modifier un remote origin si il y a un problème.   
Lister les origines `git remote -v` puis pour modifier un origin :

```bash
git remote set-url origin git@<domain.name>:<port>/<user>/<repo>.git
```