Git 🌙
Français ▾ Topics ▾ Latest version ▾ git-gc last updated in 2.47.0

NOM

git-gc - Efface les fichiers non-nécessaires et optimiser le dépôt local

SYNOPSIS

git gc [--aggressive] [--auto] [--[no-]detach] [--quiet] [--prune=<date> | --no-prune] [--force] [--keep-largest-pack]

DESCRIPTION

ExĂ©cute un certain nombre de tâches mĂ©nagères dans le dĂ©pĂ´t actuel, comme la compression des rĂ©visions de fichiers (pour rĂ©duire l’espace disque et augmenter les performances), la suppression des objets inaccessibles qui peuvent avoir Ă©tĂ© crĂ©Ă©s par des invocations antĂ©rieures de git add, l’empaquetage des rĂ©fĂ©rences, l’Ă©lagage des mĂ©tadonnĂ©es reflog, rerere ou des arbres-de-travail pĂ©rimĂ©s. Peut Ă©galement mettre Ă  jour des index auxiliaires tels que le commit-graph.

Quand les opĂ©rations courantes de porcelaine qui crĂ©ent des objets sont exĂ©cutĂ©es, elles vĂ©rifieront si le dĂ©pĂ´t a grandi de façon substantielle depuis la dernière maintenance, et si c’est le cas, elles lanceront automatiquement git gc. Voir gc.auto ci-dessous pour savoir comment dĂ©sactiver ce comportement.

ExĂ©cuter git gc manuellement ne devrait ĂŞtre nĂ©cessaire que lors de l’ajout d’objets Ă  un dĂ©pĂ´t sans exĂ©cuter rĂ©gulièrement de telles commandes de porcelaine, pour faire une optimisation ponctuelle du dĂ©pĂ´t, ou par exemple pour nettoyer un import de masse sous-optimal. Voir la section "OPTIMISATION DU DÉPĂ”T" dans git-fast-import[1] pour plus de dĂ©tails sur le cas de l’importation.

OPTIONS

--aggressive

Habituellement, git gc fonctionne très rapidement tout en fournissant une bonne utilisation de l’espace disque et de bonnes performances. Avec cette option, git gc optimisera le dĂ©pĂ´t de manière plus agressive, au prix d’un temps d’exĂ©cution beaucoup plus long. Les effets de cette optimisation sont principalement persistants. Voir la section "AGGRESSIVE" ci-dessous pour plus de dĂ©tails.

--auto

Avec cette option, git gc vĂ©rifie si un mĂ©nage est nĂ©cessaire ; si ce n’est pas le cas, il quitte sans effectuer de travail.

Voir l’option gc.auto dans la section "CONFIGURATION" ci-dessous pour savoir comment fonctionne cette heuristique.

Une fois que le mĂ©nage est dĂ©clenchĂ© par le dĂ©passement des limites des options de configuration telles que gc.auto et gc.autoPackLimit, toutes les autres tâches de mĂ©nage (par exemple rerere, working trees, reflog…​) seront Ă©galement effectuĂ©es.

--[no-]detach

Lancer en arrière-plan si le système le gère. Cette option remplace la configuration gc.autoDetach .

--[no-]cruft

Lors de la pĂ©remption d’objets inaccessibles, les emballer sĂ©parĂ©ment dans un paquet comprimĂ© au lieu de les stocker en vrac.--cruft est activĂ© par dĂ©faut.

--max-cruft-size=<n>

Lors de l’emballage d’objets inaccessibles dans un paquet dĂ©chet, limiter la taille de nouveaux paquets dĂ©chets Ă  au plus`n` octets. Renvoie toute valeur spĂ©cifiĂ©e par la configuration gc.maxCruftSize. Voir l’option --max-cruft-size de git-repack[1] pour plus de dĂ©tails.

--prune=<date>

Éliminer les objets perdus plus anciens que la date (par défaut, il y a 2 semaines, modifiable par la variable de configuration gc.pruneExpire). --prune=now élague les objets perdus quel que soit leur âge et augmente le risque de corruption si un autre processus écrit dans le dépôt en même temps ; voir "NOTES" ci-dessous. --prune est activé par défaut.

--no-prune

Ne pas supprimer les objets esseulés.

--quiet

Supprimer les rapports d’avancement.

--force

Force git gc Ă  s’exĂ©cuter mĂŞme s’il y a une autre instance de git gc qui tourne sur ce dĂ©pĂ´t.

--keep-largest-pack

Tous les paquets Ă  l’exception du plus gros paquet non cruft, tous les paquets marquĂ©s avec un fichier .keep, et tous les paquets cruft sont consolidĂ©s en un seul paquet. Lorsque cette option est utilisĂ©e, gc.bigPackThreshold est ignorĂ©.

AGGRESSIVE

Quand l’option --aggressive est fournie, git-repack[1] sera invoquĂ© avec l’option -f, qui Ă  son tour passera --no-reuse-delta Ă  git-pack-objects[1]. Cela jettera tous les deltas existants et les recalculera, au prix de passer beaucoup plus de temps sur le rĂ©-empaquetage.

Les effets de ceci sont principalement persistants, par exemple lorsque des paquets et des objets libres sont fusionnĂ©s dans un autre paquet, les deltas existants dans ce paquet peuvent ĂŞtre rĂ©utilisĂ©s, mais il y a aussi plusieurs cas oĂą nous pouvons choisir un delta sous-optimal d’un paquet plus rĂ©cent Ă  la place.

De plus, fournir --aggressive modifiera les options --depth et --window passées à git-repack[1]. Voir les paramètres gc.aggressiveDepth et gc.aggressiveWindow ci-dessous. En utilisant une taille de fenêtre plus grande, nous avons plus de chances de trouver des deltas plus optimaux.

Il n’est probablement pas utile d’utiliser cette option sur un dĂ©pĂ´t donnĂ© sans effectuer des tests de performance sur mesure. Cela prend beaucoup plus de temps, et l’optimisation de l’espace/delta qui en rĂ©sulte peut ou non en valoir la peine. Ne pas l’utiliser du tout est le bon compromis pour la plupart des utilisateurs et leurs dĂ©pĂ´ts.

CONFIGURATION

Warning

Missing fr/includes/cmd-config-section-all.txt

See original version for this content.

Warning

Missing fr/config/gc.txt

See original version for this content.

NOTES

git gc' s’efforce de ne pas supprimer les objets qui sont rĂ©fĂ©rencĂ©s n’importe oĂą dans votre dĂ©pĂ´t. En particulier, il conservera non seulement les objets rĂ©fĂ©rencĂ©s par votre ensemble actuel de branches et de tags, mais aussi les objets rĂ©fĂ©rencĂ©s par l’index, les branches de suivi Ă  distance, les reflogs (qui peuvent rĂ©fĂ©rencer des commits dans des branches qui ont Ă©tĂ© modifiĂ©es ou remontĂ©es ultĂ©rieurement), et tout ce qui se trouve dans l’espace de nom refs/*. Notez qu’une note (du type de celle crĂ©Ă©e par git notes) attachĂ©e Ă  un objet ne contribue pas Ă  maintenir l’objet en vie. Si vous vous attendez Ă  ce que certains objets soient supprimĂ©s et qu’ils ne le sont pas, vĂ©rifiez tous ces emplacements et dĂ©cidez si cela a un sens dans votre cas de supprimer ces rĂ©fĂ©rences.

D’autre part, lorsque git gc s’exĂ©cute en mĂŞme temps qu’un autre processus, il y a un risque qu’il supprime un objet que l’autre processus utilise mais auquel il n’a pas crĂ©Ă© de rĂ©fĂ©rence. Cela peut simplement faire Ă©chouer l’autre processus ou corrompre le dĂ©pĂ´t si l’autre processus ajoute plus tard une rĂ©fĂ©rence Ă  l’objet supprimĂ©. Git possède deux fonctionnalitĂ©s qui attĂ©nuent considĂ©rablement ce problème :

  1. Tout objet dont la date de modification est plus récente que la date --prune est conservé, ainsi que tout ce qui est accessible depuis cet objet.

  2. La plupart des opĂ©rations qui ajoutent un objet Ă  la base de donnĂ©es mettent Ă  jour l’heure de modification de l’objet s’il est dĂ©jĂ  prĂ©sent, de sorte que le numĂ©ro 1 s’applique.

Toutefois, ces fonctionnalitĂ©s ne constituent pas une solution complète, de sorte que les utilisateurs qui exĂ©cutent des commandes simultanĂ©ment doivent s’accommoder d’un certain risque de corruption (qui semble faible en pratique).

CROCHETS

La commande git gc --auto peut lancer le crochet pre-auto-gc. Voir githooks[5] pour de plus amples informations.

GIT

Fait partie de la suite git[1]

TRADUCTION

Cette page de manuel a été traduite par Jean-Noël Avila <jn.avila AT free DOT fr> et les membres du projet git-manpages-l10n. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le site https://github.com/jnavila/git-manpages-l10n .

scroll-to-top