|
|
Les quotas suivants sont appliqués sur Gitlab :
|
|
|
|
|
|
- Taille maximale d'un _push_ : 100 Mo
|
|
|
- Taille maximale d'un projet : 2 Go
|
|
|
|
|
|
En cas de dépassement, les _push_ seront refusés.
|
|
|
Plus précisemment, si le résultat d'un push amène à dépasser ce seuil, alors il sera refusé.
|
|
|
|
|
|
Git a été conçu pour gérer des fichiers textes tels que du code source, du markup (XML, Markdown, Asciidoc, LaTeX, ...), des fichiers JSON/YAML/..., et tous les fichiers de taille raisonnable liés à un projet (images du site web, fonts, etc).
|
|
|
|
|
|
Tout ce qui peut être généré (exécutable du projet, zip, ...) ou récupéré (dépendances npm/pip/maven/...) ne doit pas être stocké dans Git.
|
|
|
|
|
|
Github recommande fortement une taille de projet inférieure à 1 Go : https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-large-files-on-github.
|
|
|
|
|
|
## En cas de dépassement de la taille du projet
|
|
|
Si l'espace disque consommé par votre projet dépasse le quota, il n'est plus possible de pousser des commits.
|
|
|
|
|
|
Le message d'erreur dans la console est du type :
|
|
|
|
|
|
```
|
|
|
remote: GL-HOOK-ERR: Le projet groupe-test/projet-test dépasse le quota d'espace disque (202 Mb sur 200 Mb autorisés).
|
|
|
remote: GL-HOOK-ERR: Les push sont bloqués jusqu'à ce que la taille du projet repasse sous le quota.
|
|
|
```
|
|
|
|
|
|
Il arrive que l'on pousse des fichiers ou des répertoires que l'on n'aurait pas souhaité envoyer à Gitlab (un fichier de dump, un répertoire `node_modules` ou `venv`, ...).
|
|
|
Le supprimer localement, faire un commit et pousser le commit ne suffira pas à réduire l'espace disque consommé par le projet car les fichiers sont toujours dans l'historique de git.
|
|
|
|
|
|
Il est donc nécessaire de ré-écrire l'historique de git.
|
|
|
|
|
|
> :warning: c'est une opération destructrice, assurez-vous d'avoir des sauvegardes.
|
|
|
|
|
|
Gitlab propose une documentation et une procédure pour ces cas : https://src.koda.cnrs.fr/help/user/project/repository/reducing_the_repo_size_using_git.md.
|
|
|
|
|
|
|
|
|
|
|
|
### Générer et récupérer une archive
|
|
|
Dans Gitlab : _Settings_ > _General_ > _Advanced_ > _Export project_.
|
|
|
|
|
|
### Identifier les potentiels gros fichiers
|
|
|
- installer l'outil [git-filter-repo](https://github.com/newren/git-filter-repo)
|
|
|
|
|
|
- décompresser l'archive récupérée précédemment **en vous plaçant dans un répertoire différent de votre projet git**
|
|
|
|
|
|
```bash
|
|
|
mkdir archive_projet-test
|
|
|
tar xzf 2022-05-20_17-02-005_groupe-test_projet-test_export.tar.gz -C archive_projet-test
|
|
|
```
|
|
|
|
|
|
- effectuer un clone git depuis cette archive
|
|
|
|
|
|
```bash
|
|
|
git clone --bare --mirror archive_projet-test/project.bundle
|
|
|
cd project.git/
|
|
|
```
|
|
|
|
|
|
- lancer l'analyse
|
|
|
|
|
|
```bash
|
|
|
git filter-repo --analyze
|
|
|
head filter-repo/analysis/*-{all,deleted}-sizes.txt
|
|
|
```
|
|
|
|
|
|
On peut voir notamment les plus gros fichiers :
|
|
|
|
|
|
```
|
|
|
==> filter-repo/analysis/path-all-sizes.txt <==
|
|
|
=== All paths by reverse accumulated size ===
|
|
|
Format: unpacked size, packed size, date deleted, path name
|
|
|
52428800 52444806 2022-05-20 gros_fichier_50_mo
|
|
|
52428800 52444806 <present> autre_gros_fichier_50_mo
|
|
|
41943040 41955846 2022-05-20 gros_fichier_40_mo
|
|
|
31457280 31466890 <present> gros_fichier_30_mo
|
|
|
20971520 20977930 <present> gros_fichier_20_mo
|
|
|
5242880 5244490 <present> petit_fichier_5_mo
|
|
|
9437184 4197801 <present> zeros
|
|
|
167 175 <present> README.md
|
|
|
```
|
|
|
|
|
|
Il est intéressant de voir ici que deux gros fichiers de 40 et 50 Mo ont été supprimés, mais sont encore présents dans l'historique, ce qui est tout-à-fait normal.
|
|
|
|
|
|
### Supprimer les gros fichiers
|
|
|
Pour supprimer des fichiers bien identifiés :
|
|
|
|
|
|
```bash
|
|
|
# Suppression des 2 fichers de 50 Mo
|
|
|
git filter-repo --path gros_fichier_50_mo --path autre_gros_fichier_50_mo --invert-paths
|
|
|
```
|
|
|
|
|
|
Pour supprimer en masse tous les fichiers de plus de 10 Mo :
|
|
|
```bash
|
|
|
git filter-repo --strip-blobs-bigger-than 10M
|
|
|
```
|
|
|
|
|
|
### Pousser les modifications
|
|
|
Cette étape consiste à pousser le dépôt git avec l'option `--force` car on a ré-écrit l'historique.
|
|
|
|
|
|
> **Note** : [Contactez le support](https://e-dem.cnrs.fr/jira/servicedesk/customer/portal/86) afin de temporairement débloquer le quota sur ce projet pour permettre le push.
|
|
|
|
|
|
Il faut tout d'abord adapter les _remotes_ :
|
|
|
|
|
|
```bash
|
|
|
git remote remove origin
|
|
|
git remote add origin https://src.koda.cnrs.fr/groupe-test/projet-test.git
|
|
|
```
|
|
|
|
|
|
Pousser les modifications sur les branches, les tags et pour supprimer les commits n'existant plus :
|
|
|
|
|
|
```bash
|
|
|
git push origin --force 'refs/heads/*'
|
|
|
git push origin --force 'refs/tags/*'
|
|
|
git push origin --force 'refs/replace/*'
|
|
|
```
|
|
|
|
|
|
> **Note** : il est nécessaire de désactiver temporairement la protection des branches et des tags si elles ont été configurées dans le projet.
|
|
|
|
|
|
### Finalisation
|
|
|
Pour le moment, l'affichage de la taille du projet dans Gitlab est toujours à son ancienne valeur.
|
|
|
Une dernière action est nécessaire pour que le nettoyage soit pleinement effectif.
|
|
|
|
|
|
Pour cela, il faut attendre 30 minutes que le processus de _cleanup_ de Gitlab se déclenche.
|
|
|
|
|
|
Ensuite, effectuer un _cleanup_ du projet.
|
|
|
Pour cela, récupérer le contenu du fichier `filter-repo/commit-map` et le charger dans _Settings_ > _Repository_ > _Repository cleanup_ (se référer à [la documentation](https://src.koda.cnrs.fr/help/user/project/repository/reducing_the_repo_size_using_git.md#repository-cleanup) si le fichier est trop volumineux).
|
|
|
|
|
|
Une fois l'opération terminée, un mail est transmis indiquant la nouvelle taille du projet. |
|
|
\ No newline at end of file |