> For the complete documentation index, see [llms.txt](https://arpelin.gitbook.io/arpelin/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://arpelin.gitbook.io/arpelin/nf525/documentation-git-logiciel-arpelin.md).

# Documentation Git - Logiciel Arpelin

La gestion de version Git répond aux exigences du **§4.3.6** du référentiel NF525 concernant :

* Le dépôt des sources et preuve d'authenticité du logiciel audité
* La méthodologie incontestable d'identification de l'authenticité
* La mise à disposition de l'empreinte de la version auditée

***

### 🏗️ Architecture de Versioning

#### Structure des Répertoires Versionnés

```
/var/www/
├── _main/          ← Code source principal (versionné)
├── _files/         ← Scripts privés PHP (versionné)
├── cms_client1/    ← Instances clients (non versionné)
├── cms_client2/    ← Instances clients (non versionné)
└── .git/           ← Dépôt Git local
```

#### Périmètre de Certification

* ✅ **Versionné** : `/var/www/_main` et `/var/www/_files`
* ❌ **Exclu** : Dossiers clients, données personnalisées, logs

***

### 🔧 Commandes Git de Base

#### Vérification de l'État

bash

```bash
# Voir l'état actuel du dépôt
git status

# Voir l'historique des versions
git log --oneline

# Voir les tags (versions officielles)
git tag

# Obtenir l'empreinte de la version actuelle
git rev-parse HEAD
```

#### Création d'une Nouvelle Version

bash

```bash
# 1. Ajouter les modifications
git add _main _files

# 2. Créer un commit avec description
git commit -m "Description des modifications"

# 3. Créer un tag de version (optionnel)
git tag v1.2.3
```

***

### 📦 Processus de Développement

#### 1. Développement Normal

* Modifier les fichiers dans `/var/www/_main` et `/var/www/_files`
* Tester les modifications sur les instances clients
* Valider le fonctionnement

#### 2. Validation et Versioning

bash

```bash
# Vérifier les fichiers modifiés
git status

# Ajouter les modifications au suivi
git add _main _files

# Créer une version stable
git commit -m "Version 1.2 - Correction bug encaissement TVA"

# Marquer comme version officielle
git tag v1.2-stable
```

#### 3. Types de Versions

* **Version Majeure** (v2.0) : Nouvelles fonctionnalités impactant la certification
* **Version Mineure** (v1.2) : Corrections, améliorations sans impact certification
* **Version Patch** (v1.2.1) : Corrections de bugs urgents

***

### 📊 Commandes pour Audit NF525

#### Informations Requises par l'Auditeur

**1. Empreinte de la Version Auditée**

bash

```bash
# Obtenir l'empreinte SHA-1 du commit actuel
git rev-parse HEAD

# Exemple de sortie : a2fb03e1234567890abcdef...
```

**2. Historique des Versions**

bash

```bash
# Voir toutes les versions avec dates
git log --oneline --decorate

# Voir uniquement les versions taguées
git tag -l --sort=-version:refname
```

**3. Vérification d'Intégrité**

bash

```bash
# Vérifier que le dépôt n'est pas corrompu
git fsck

# Voir les statistiques du dépôt
git count-objects -v
```

**4. Détails d'une Version Spécifique**

bash

```bash
# Voir les détails d'un commit
git show a2fb03e

# Voir les fichiers modifiés dans un commit
git show --name-only a2fb03e

# Comparer deux versions
git diff v1.1..v1.2
```

***

### 🔍 Traçabilité et Conformité

#### Preuve d'Authenticité

Chaque commit Git génère automatiquement :

* **Empreinte SHA-1** unique et inaltérable
* **Horodatage** précis (date, heure, timezone)
* **Contenu exact** de tous les fichiers versionnés
* **Métadonnées** : auteur, message de commit

#### Vérification d'Intégrité

bash

```bash
# Vérifier qu'aucun fichier n'a été modifié depuis le dernier commit
git diff --exit-code

# Si aucune sortie = aucune modification
# Si des différences s'affichent = modifications détectées
```

#### Extraction d'une Version

bash

```bash
# Créer une archive de la version actuelle
git archive HEAD --format=tar.gz -o arpelin-$(git describe --tags).tar.gz

# Extraire une version spécifique dans un dossier
git archive v1.2 --format=tar | tar -xf - -C /tmp/version-1.2/
```

***

### 📋 Procédures Documentées

#### Procédure de Développement

1. **Développement** sur environnement de production `/var/www/`
2. **Tests** fonctionnels complets
3. **Validation** des fonctionnalités critiques
4. **Commit** avec message descriptif
5. **Tag** pour versions stables
6. **Documentation** des changements

#### Procédure de Sauvegarde

bash

```bash
# Sauvegarde quotidienne du dépôt Git
cp -r /var/www/.git /backup/git-$(date +%Y%m%d)/

# Vérification de la sauvegarde
cd /backup/git-$(date +%Y%m%d)/ && git fsck
```

#### Procédure de Rollback

bash

```bash
# Revenir à une version antérieure (lecture seule)
git checkout v1.1

# Créer une nouvelle version basée sur une ancienne
git checkout -b fix-from-v1.1 v1.1
# ... modifications ...
git commit -m "Correction basée sur v1.1"
git tag v1.1.1
```

***

### ⚠️ Consignes de Sécurité

#### Données Sensibles

* ❌ **Ne jamais commiter** : mots de passe, clés API, données clients
* ✅ **Utiliser des variables d'environnement** pour les configurations sensibles
* ✅ **Fichier .gitignore** pour exclure automatiquement certains fichiers

#### Exemple .gitignore

```
# Exclure les configurations sensibles
config/database.php
*.log
backup/
cms_client*/uploads/
```

#### Accès au Dépôt

* 🔒 **Dépôt local uniquement** sur le serveur de production
* 🔒 **Accès limité** : administrateur système uniquement
* 🔒 **Pas d'accès externe** (GitHub, GitLab...) pour le code de production

***

### 🎯 Pour les Auditeurs NF525

#### Vérifications Possibles

**1. Conformité §4.3.6**

bash

```bash
# L'auditeur peut vérifier :
git rev-parse HEAD                    # Empreinte disponible ✓
git log --oneline                     # Historique tracé ✓
git fsck                             # Intégrité vérifiée ✓
git show --stat HEAD                 # Contenu authentique ✓
```

**2. Non-Altération Pendant l'Audit**

bash

```bash
# Empreinte au début de l'audit
HASH_DEBUT=$(git rev-parse HEAD)

# ... tests de l'auditeur ...

# Empreinte à la fin de l'audit  
HASH_FIN=$(git rev-parse HEAD)

# Vérification d'intégrité
if [ "$HASH_DEBUT" = "$HASH_FIN" ]; then
    echo "Code non modifié pendant l'audit ✓"
else
    echo "Modification détectée pendant l'audit ✗"
fi
```

**3. Accès aux Versions Antérieures**

bash

```bash
# Voir toutes les versions disponibles
git tag -l

# Examiner une version spécifique
git show v1.0-certification:_main/index.php
```

***

### 📞 Support et Contact

**Responsable Technique** : Emre KOSE\
**Email** : <emre.kose@arpelin.fr>\
**Téléphone** : +33 3 39 39 99 79

**Responsable Certification NF525** : Emre KOSE

***

### 📚 Références

* **Référentiel NF525** - Partie 9 : Exigences qualité et documentaires
* **§4.3.6** : Dépôt des sources et preuve d'authenticité du logiciel audité
* **Documentation Git officielle** : <https://git-scm.com/doc>

***

*Document créé le : 17/07/2025*
