# 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*


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://arpelin.gitbook.io/arpelin/nf525/documentation-git-logiciel-arpelin.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
