Git 🌙
Chapters â–Ÿ 2nd Edition

8.1 Personnalisation de Git - Configuration de Git

Jusqu’ici, nous avons traitĂ© les bases du fonctionnement et de l’utilisation de Git et introduit un certain nombre d’outils fournis par Git pour travailler plus facilement et plus efficacement. Dans ce chapitre, nous aborderons quelques opĂ©rations permettant d’utiliser Git de maniĂšre plus personnalisĂ©e en vous prĂ©sentant quelques paramĂštres de configuration importants et le systĂšme d’interceptions. GrĂące Ă  ces outils, il devient enfantin de faire fonctionner Git exactement comme vous, votre sociĂ©tĂ© ou votre communautĂ© en avez besoin.

Configuration de Git

Comme vous avez pu l’entrevoir dans DĂ©marrage rapide, vous pouvez spĂ©cifier les paramĂštres de configuration de Git avec la commande git config. Une des premiĂšres choses que vous avez faites a Ă©tĂ© de paramĂ©trer votre nom et votre adresse de courriel :

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

À prĂ©sent, vous allez apprendre quelques-unes des options similaires les plus intĂ©ressantes pour paramĂ©trer votre usage de Git.

Vous avez vu des dĂ©tails de configuration simple de Git au premier chapitre, mais nous allons les rĂ©viser. Git utilise une sĂ©rie de fichiers de configuration pour dĂ©terminer son comportement selon votre personnalisation. Le premier endroit que Git visite est le fichier /etc/gitconfig qui contient des valeurs pour tous les utilisateurs du systĂšme et tous leurs dĂ©pĂŽts. Si vous passez l’option --system Ă  git config, il lit et Ă©crit ce fichier.

L’endroit suivant visitĂ© par Git est le fichier ~/.gitconfig qui est spĂ©cifique Ă  chaque utilisateur. Vous pouvez faire lire et Ă©crire Git dans ce fichier au moyen de l’option --global.

Enfin, Git recherche des valeurs de configuration dans le fichier de configuration du rĂ©pertoire Git (.git/config) du dĂ©pĂŽt en cours d’utilisation. Ces valeurs sont spĂ©cifiques Ă  un unique dĂ©pĂŽt.

Chaque niveau surcharge le niveau précédent, ce qui signifie que les valeurs dans .git/config écrasent celles dans /etc/gitconfig.

Note

Ces fichiers de configuration Git sont des fichiers texte, donc vous pouvez positionner ces valeurs manuellement en éditant le fichier et en utilisant la syntaxe correcte, mais il reste généralement plus facile de lancer la commande git config.

Configuration de base d’un client

Les options de configuration reconnues par Git tombent dans deux catĂ©gories : cĂŽtĂ© client et cĂŽtĂ© serveur. La grande majoritĂ© se situe cĂŽtĂ© client pour coller Ă  vos prĂ©fĂ©rences personnelles de travail. Parmi les tonnes d’options disponibles, seules les plus communes ou affectant significativement la maniĂšre de travailler seront couvertes. De nombreuses options ne s’avĂšrent utiles qu’en de rares cas et ne seront pas traitĂ©es. Pour voir la liste de toutes les options que votre version de Git reconnaĂźt, vous pouvez lancer :

$ man git-config

Cette commande affiche toutes les options disponibles avec quelques détails. Vous pouvez aussi trouver des informations de référence sur https://git-scm.com/docs/git-config.html.

core.editor

Par dĂ©faut, Git utilise votre Ă©diteur par dĂ©faut ($VISUAL ou $EDITOR) ou se replie sur l’éditeur Vi pour la crĂ©ation et l’édition des messages de validation et d’étiquetage. Pour modifier ce programme par dĂ©faut pour un autre, vous pouvez utiliser le paramĂštre core.editor :

$ git config --global core.editor emacs

Maintenant, quel que soit votre éditeur par défaut, Git démarrera Emacs pour éditer les messages.

commit.template

Si vous rĂ©glez ceci sur le chemin d’un fichier sur votre systĂšme, Git utilisera ce fichier comme message par dĂ©faut quand vous validez. L’intĂ©rĂȘt de crĂ©er un modĂšle de message de validation est que vous pouvez l’utiliser pour vous rappeler (ou rappeler aux autres) du format et du style corrects pour crĂ©er un message de validation.

Par exemple, supposons que vous créiez un fichier modÚle dans $HOME/.gitmessage.txt qui ressemble à ceci :

ligne de sujet (essayer de la garder sous 50 caractĂšres)

description multiligne du commit
ajouter tous les détails que vous voulez

[ticket: X]

Notez comment ce modĂšle de validation rappelle au validateur de conserver une ligne de titre courte (pour coller avec la sortie de git log --oneline), et d’ajouter de plus amples dĂ©tails dessous, et de faire rĂ©fĂ©rence Ă  un incident ou un numĂ©ro de ticket dans un systĂšme de suivi de ticket s’il existe.

Pour indiquer Ă  Git de l’utiliser pour le message par dĂ©faut qui apparaĂźtra dans votre Ă©diteur quand vous lancerez git commit, rĂ©glez le paramĂštre de configuration commit.template :

$ git config --global commit.template ~/.gitmessage.txt
$ git commit

Ainsi, votre éditeur ouvrira quelque chose ressemblant à ceci comme modÚle de message de validation :

ligne de sujet

description

[ticket: X]
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   lib/test.rb
#
~
~
".git/COMMIT_EDITMSG" 14L, 297C

Si vous avez une rĂšgle de messages de validation, placez un modĂšle de cette rĂšgle sur votre systĂšme et configurez Git pour qu’il l’utilise par dĂ©faut, cela amĂ©liorera les chances que cette rĂšgle soit effectivement suivie.

core.pager

Le paramĂštre core.pager dĂ©termine quel pager est utilisĂ© lorsque des pages de Git sont Ă©mises, par exemple lors d’un log ou d’un diff. Vous pouvez le fixer Ă  more ou Ă  votre pager favori (par dĂ©faut, il vaut less) ou vous pouvez le dĂ©sactiver en fixant sa valeur Ă  une chaĂźne vide :

$ git config --global core.pager ''

Si vous lancez cela, Git affichera la totalitĂ© du rĂ©sultat de toutes les commandes d’une traite, quelle que soit sa longueur.

user.signingkey

Si vous faites des étiquettes annotées signées (comme décrit dans Signer votre travail), simplifiez-vous la vie en définissant votre clé GPG de signature en paramÚtre de configuration. Définissez votre ID de clé ainsi :

$ git config --global user.signingkey <gpg-key-id>

Maintenant, vous pouvez signer vos étiquettes sans devoir spécifier votre clé à chaque fois que vous utilisez la commande git tag :

$ git tag -s <nom-Ă©tiquette>

core.excludesfile

Comme décrit dans Ignorer des fichiers, vous pouvez ajouter des patrons dans le fichier .gitignore de votre projet pour indiquer à Git de ne pas considérer certains fichiers comme non suivis ou pour éviter de les indexer lorsque vous lancez git add sur eux.

Mais vous pouvez souhaiter dans quelques cas ignorer certains fichiers dans tous vos dépÎts. Si votre ordinateur utilise macOS, vous connaissez certainement les fichiers .DS_Store. Si votre éditeur préféré est Emacs ou Vim, vous connaissez sûrement aussi les fichiers qui se terminent par ~ ou .swp.

Cette option vous permet d’écrire un fichier .gitignore global. Si vous crĂ©ez un fichier ~/.gitignore_global contenant ceci :

*~
.*.swp
.DS_Store

et que vous lancez git config --global core.excludesfile ~/.gitignore_global, Git ne vous importunera plus avec ces fichiers.

help.autocorrect

Si vous avez fait une faute de frappe en tapant une commande Git, il vous affiche quelque chose comme :

$ git chekcout master
git : 'chekcout' n'est pas une commande git. Voir 'git --help'.

Vouliez-vous dire cela ?
        checkout

Git essaie de deviner ce que vous avez voulu dire, mais continue de refuser de le faire. Si vous positionnez le paramÚtre help.autocorrect à 1, Git va réellement lancer cette commande à votre place :

$ git chekcout master
ATTENTION : vous avez invoqué une commande Git nommée 'chekcout' qui n'existe pas.
Continuons en supposant que vous avez voulu dire 'checkout'
dans 0.1 secondes automatiquement...

Notez l’histoire des « 0.1 secondes ». help.autocorrect est un fait un entier qui reprĂ©sente des dixiĂšmes de seconde. Ainsi, si vous le rĂ©glez Ă  50, Git vous laissera 5 secondes pour changer d’avis avant de lancer la commande qu’il aura devinĂ©e.

Couleurs dans Git

Git sait coloriser ses affichages dans votre terminal, ce qui peut faciliter le parcours visuel des rĂ©sultats. Un certain nombre d’options peuvent vous aider Ă  rĂ©gler la colorisation Ă  votre goĂ»t.

color.ui

Git colorise automatiquement la plupart de ses affichages mais il existe une option globale pour désactiver ce comportement. Pour désactiver toute la colorisation par défaut, lancez ceci :

$ git config --global color.ui false

La valeur par dĂ©faut est auto, ce qui colorise la sortie lorsque celle-ci est destinĂ©e Ă  un terminal, mais Ă©limine les codes de contrĂŽle de couleur quand la sortie est redirigĂ©e dans un fichier ou l’entrĂ©e d’une autre commande.

Vous pouvez aussi la rĂ©gler Ă  always (toujours) pour activer la colorisation en permanence. C’est une option rarement utile. Dans la plupart des cas, si vous tenez vraiment Ă  coloriser vos sorties redirigĂ©es, vous pourrez passer le drapeau --color Ă  la commande Git pour la forcer Ă  utiliser les codes de couleur. Le rĂ©glage par dĂ©faut est donc le plus utilisĂ©.

color.*

Si vous souhaitez ĂȘtre plus spĂ©cifique concernant les commandes colorisĂ©es, Git propose des paramĂštres de colorisation par action. Chacun peut ĂȘtre fixĂ© Ă  true, false ou always.

color.branch
color.diff
color.interactive
color.status

De plus, chacun d’entre eux dispose d’un sous-ensemble de paramĂštres qui permettent de surcharger les couleurs pour des parties des affichages. Par exemple, pour rĂ©gler les couleurs de mĂ©ta-informations du diff avec une Ă©criture en bleu gras (bold en anglais) sur fond noir :

$ git config --global color.diff.meta "blue black bold"

La couleur peut prendre les valeurs suivantes : normal, black, red, green, yellow, blue, magenta, cyan ou white. Si vous souhaitez ajouter un attribut de casse, les valeurs disponibles sont bold (gras), dim (léger), ul (underlined, souligné), blink (clignotant) et reverse (inversé).

Outils externes de fusion et de différence

Bien que Git ait une implĂ©mentation interne de diff que vous avez dĂ©jĂ  utilisĂ©e, vous pouvez sĂ©lectionner Ă  la place un outil externe. Vous pouvez aussi sĂ©lectionner un outil graphique pour la fusion et la rĂ©solution de conflit au lieu de devoir rĂ©soudre les conflits manuellement. Je dĂ©montrerai le paramĂ©trage avec Perforce Merge Tool (P4Merge) pour visualiser vos diffĂ©rences et rĂ©soudre vos fusions parce que c’est un outil graphique agrĂ©able et gratuit.

Si vous voulez l’essayer, P4Merge fonctionne sur tous les principaux systĂšmes d’exploitation. Dans cet exemple, je vais utiliser la forme des chemins usitĂ©e sur macOS et Linux. Pour Windows, vous devrez changer /usr/local/bin en un chemin d’exĂ©cution d’un programme de votre environnement.

Pour commencer, tĂ©lĂ©chargez P4Merge depuis https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools. Ensuite, il faudra mettre en place un script d’enrobage pour lancer les commandes. Je vais utiliser le chemin macOS pour l’exĂ©cutable ; dans d’autres systĂšmes, il rĂ©sidera oĂč votre binaire p4merge a Ă©tĂ© installĂ©. CrĂ©ez un script enveloppe nommĂ© extMerge qui appelle votre binaire avec tous les arguments fournis :

$ cat /usr/local/bin/extMerge
#!/bin/sh
/Applications/p4merge.app/Contents/MacOS/p4merge $*

L’enveloppe diff s’assure que sept arguments ont Ă©tĂ© fournis et en passe deux Ă  votre script de fusion. Par dĂ©faut, Git passe au programme de diff les arguments suivants :

chemin ancien-fichier ancien-hex ancien-mode nouveau-fichier nouveau-hex nouveau-mode

Comme seuls les arguments ancien-fichier et nouveau-fichier sont nĂ©cessaires, vous utilisez le script d’enveloppe pour passer ceux dont vous avez besoin.

$ cat /usr/local/bin/extDiff
#!/bin/sh
[ $# -eq 7 ] && /usr/local/bin/extMerge "$2" "$5"

Vous devez aussi vous assurer que ces fichiers sont exécutables :

$ sudo chmod +x /usr/local/bin/extMerge
$ sudo chmod +x /usr/local/bin/extDiff

À prĂ©sent, vous pouvez rĂ©gler votre fichier de configuration pour utiliser vos outils personnalisĂ©s de rĂ©solution de fusion et de diffĂ©rence. Pour cela, il faut un certain nombre de personnalisations : merge.tool pour indiquer Ă  Git quelle stratĂ©gie utiliser, mergetool.<tool>.cmd pour spĂ©cifier comment lancer cette commande, mergetool.<tool>.trustExitCode pour indiquer Ă  Git si le code de sortie du programme indique une rĂ©solution de fusion rĂ©ussie ou non et diff.external pour indiquer Ă  Git quelle commande lancer pour les diffĂ©rences. Ainsi, vous pouvez lancer les quatre commandes :

$ git config --global merge.tool extMerge
$ git config --global mergetool.extMerge.cmd \
  'extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"'
$ git config --global mergetool.trustExitCode false
$ git config --global diff.external extDiff

ou vous pouvez éditer votre fichier ~/.gitconfig pour y ajouter ces lignes :

[merge]
  tool = extMerge
[mergetool "extMerge"]
  cmd = extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
  trustExitCode = false
[diff]
  external = extDiff

AprÚs avoir réglé tout ceci, si vous lancez des commandes de diff telles que celle-ci :

$ git diff 32d1776b1^ 32d1776b1

Au lieu d’obtenir la sortie du diff dans le terminal, Git lance P4Merge, ce qui ressemble à ceci :

P4Merge.
Figure 142. P4Merge.

Si vous essayez de fusionner deux branches et crĂ©ez des conflits de fusion, vous pouvez lancer la commande git mergetool qui dĂ©marrera P4Merge pour vous laisser rĂ©soudre les conflits au moyen d’un outil graphique.

Le point agrĂ©able avec cette mĂ©thode d’enveloppe est que vous pouvez changer facilement d’outils de diff et de fusion. Par exemple, pour changer vos outils extDiff et extMerge pour une utilisation de l’outil KDiff3, il vous suffit d’éditer le fichier extMerge :

$ cat /usr/local/bin/extMerge
#!/bin/sh
/Applications/kdiff3.app/Contents/MacOS/kdiff3 $*

À prĂ©sent, Git va utiliser l’outil KDiff3 pour visualiser les diffĂ©rences et rĂ©soudre les conflits de fusion.

Git est livrĂ© prĂ©rĂ©glĂ© avec un certain nombre d’autres outils de rĂ©solution de fusion pour vous Ă©viter d’avoir Ă  gĂ©rer la configuration cmd. Pour obtenir une liste des outils qu’il supporte, essayez ceci :

$ git mergetool --tool-help
'git mergetool --tool=<tool>' may be set to one of the following:
        emerge
        gvimdiff
        gvimdiff2
        opendiff
        p4merge
        vimdiff
        vimdiff2

The following tools are valid, but not currently available:
        araxis
        bc3
        codecompare
        deltawalker
        diffmerge
        diffuse
        ecmerge
        kdiff3
        meld
        tkdiff
        tortoisemerge
        xxdiff

Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

Si KDiff3 ne vous intĂ©resse pas pour gĂ©rer les diffĂ©rences mais seulement pour la rĂ©solution de fusion et qu’il est prĂ©sent dans votre chemin d’exĂ©cution, vous pouvez lancer :

$ git config --global merge.tool kdiff3

Si vous lancez ceci au lieu de modifier les fichiers extMerge ou extDiff, Git utilisera KDiff3 pour les rĂ©solutions de fusion et l’outil diff normal de Git pour les diffĂ©rences.

Formatage et espaces blancs

Les problĂšmes de formatage et de blancs sont parmi les plus subtils et frustrants que les dĂ©veloppeurs rencontrent lorsqu’ils collaborent, spĂ©cifiquement d’une plate-forme Ă  l’autre. Il est trĂšs facile d’introduire des modifications subtiles de blancs lors de soumission de patchs ou d’autres modes de collaboration, car les Ă©diteurs de texte les insĂšrent silencieusement ou les programmeurs Windows ajoutent des retours chariot Ă  la fin des lignes qu’ils modifient. Git dispose de quelques options de configuration pour traiter ces problĂšmes.

core.autocrlf

Si vous programmez vous-mĂȘme sous Windows ou si vous utilisez un autre systĂšme d’exploitation mais devez travailler avec des personnes travaillant sous Windows, vous rencontrerez Ă  un moment ou Ă  un autre des problĂšmes de caractĂšres de fin de ligne. Ceci est dĂ» au fait que Windows utilise pour marquer les fins de ligne dans ses fichiers un caractĂšre « retour chariot » (carriage return, CR) suivi d’un caractĂšre « saut de ligne » (line feed, LF), tandis que macOS et Linux utilisent seulement le caractĂšre « saut de ligne ». C’est un cas subtil mais incroyablement ennuyeux de problĂšme gĂ©nĂ©rĂ© par la collaboration inter plate-forme.

Git peut gĂ©rer ce cas en convertissant automatiquement les fins de ligne CRLF en LF lorsque vous validez, et inversement lorsqu’il extrait des fichiers sur votre systĂšme. Vous pouvez activer cette fonctionnalitĂ© au moyen du paramĂštre core.autocrlf. Si vous avez une machine Windows, positionnez-le Ă  true. Git convertira les fins de ligne de LF en CRLF lorsque vous extrairez votre code :

$ git config --global core.autocrlf true

Si vous utilisez un systĂšme Linux ou macOS qui utilise les fins de ligne LF, vous ne souhaitez sĂ»rement pas que Git les convertisse automatiquement lorsque vous extrayez des fichiers. Cependant, si un fichier contenant des CRLF est accidentellement introduit en gestion de versions, vous souhaitez que Git le corrige. Vous pouvez indiquer Ă  Git de convertir CRLF en LF lors de la validation mais pas dans l’autre sens en fixant core.autocrlf Ă  input :

$ git config --global core.autocrlf input

Ce rĂ©glage devrait donner des fins de ligne en CRLF lors d’extraction sous Windows mais en LF sous macOS et Linux et dans le dĂ©pĂŽt.

Si vous ĂȘtes un programmeur Windows gĂ©rant un projet spĂ©cifique Ă  Windows, vous pouvez dĂ©sactiver cette fonctionnalitĂ© et forcer l’enregistrement des « retour chariot » dans le dĂ©pĂŽt en rĂ©glant la valeur du paramĂštre Ă  false :

$ git config --global core.autocrlf false

core.whitespace

Git est paramĂ©trĂ© par dĂ©faut pour dĂ©tecter et corriger certains problĂšmes de blancs. Il peut rechercher six problĂšmes de blancs de base. La correction de trois problĂšmes est activĂ©e par dĂ©faut et peut ĂȘtre dĂ©sactivĂ©e et celle des trois autres n’est pas activĂ©e par dĂ©faut mais peut ĂȘtre activĂ©e.

Les trois activĂ©es par dĂ©faut sont blank-at-eol qui dĂ©tecte les espaces en fin de ligne, blank-at-eof qui dĂ©tecte les espaces en fin de fichier et space-before-tab qui recherche les espaces avant les tabulations au dĂ©but d’une ligne.

Les trois autres qui sont dĂ©sactivĂ©es par dĂ©faut mais peuvent ĂȘtre activĂ©es sont indent-with-non-tab qui recherche des lignes qui commencent par des espaces au lieu de tabulations (contrĂŽlĂ© par l’option tabwidth), tab-in-indent qui recherche les tabulations dans la portion d’indentation d’une ligne et cr-at-eol qui indique Ă  Git que les « retour chariot » en fin de ligne sont acceptĂ©s.

Vous pouvez indiquer à Git quelle correction vous voulez activer en fixant core.whitespace avec les valeurs que vous voulez ou non, séparées par des virgules. Vous pouvez désactiver des réglages en les éliminant de la chaßne de paramétrage ou en les préfixant avec un -. Par exemple, si vous souhaitez activer tout sauf space-before-tab, vous pouvez lancer ceci (avec trailing-space comme raccourci pour à la fois blank-at-eol et blank-at-eof) :

$ git config --global core.whitespace \
    trailing-space,-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol

Ou vous pouvez spécifier seulement la partie personnalisée :

$ git config --global core.whitespace \
    -space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol

Git va dĂ©tecter ces problĂšmes quand vous lancez une commande git diff et essayer de les coloriser pour vous permettre de les rĂ©gler avant de valider. Il utilisera aussi ces paramĂštres pour vous aider quand vous appliquerez des patchs avec git apply. Quand vous appliquez des patchs, vous pouvez paramĂ©trer Git pour qu’il vous avertisse s’il doit appliquer des patchs qui prĂ©sentent les dĂ©fauts de blancs :

$ git apply --whitespace=warn <rustine>

Ou vous pouvez indiquer à Git d’essayer de corriger automatiquement le problùme avant d’appliquer le patch :

$ git apply --whitespace=fix <rustine>

Ces options s’appliquent aussi Ă  git rebase. Si vous avez validĂ© avec des problĂšmes de blancs mais n’avez pas encore poussĂ© en amont, vous pouvez lancer un rebase avec l’option --whitespace=fix pour faire corriger Ă  Git les erreurs de blancs pendant qu’il rĂ©Ă©crit les patchs.

Configuration du serveur

Il n’y a pas autant d’options de configuration de Git cĂŽtĂ© serveur, mais en voici quelques unes intĂ©ressantes dont il est utile de prendre note.

receive.fsckObjects

Git est capable de vĂ©rifier que tous les objets reçus pendant une poussĂ©e correspondent Ă  leur somme de contrĂŽle SHA-1 et qu’ils pointent sur des objets valides. Cependant, il ne le fait pas par dĂ©faut sur chaque poussĂ©e. C’est une opĂ©ration relativement lourde qui peut Ă©normĂ©ment allonger les poussĂ©es selon la taille du dĂ©pĂŽt ou de la poussĂ©e. Si vous voulez que Git vĂ©rifie la cohĂ©rence des objets Ă  chaque poussĂ©e, vous pouvez le forcer en fixant le paramĂštre receive.fsckObjects Ă  true :

$ git config --system receive.fsckObjects true

Maintenant, Git va vĂ©rifier l’intĂ©gritĂ© de votre dĂ©pĂŽt avant que chaque poussĂ©e ne soit acceptĂ©e pour s’assurer que des clients dĂ©fectueux (ou malicieux) n’introduisent pas des donnĂ©es corrompues.

receive.denyNonFastForwards

Si vous rebasez des commits que vous avez dĂ©jĂ  poussĂ©s, puis essayez de pousser Ă  nouveau, ou inversement, si vous essayez de pousser un commit sur une branche distante qui ne contient pas le commit sur lequel la branche distante pointe, votre essai Ă©chouera. C’est gĂ©nĂ©ralement une bonne politique, mais dans le cas d’un rebasage, vous pouvez dĂ©cider que vous savez ce que vous faites et forcer la mise Ă  jour de la branche distante en ajoutant l’option -f Ă  votre commande.

Pour dĂ©sactiver la possibilitĂ© de forcer la mise Ă  jour des branches distantes autres qu’en avance rapide, rĂ©glez receive.denyNonFastForwards :

$ git config --system receive.denyNonFastForwards true

Un autre moyen de faire consiste Ă  utiliser des crochets cĂŽtĂ©-serveur, point qui sera abordĂ© plus loin. Cette autre approche permet de rĂ©aliser des traitements plus complexes comme de refuser l’avance rapide seulement Ă  un certain groupe d’utilisateurs.

receive.denyDeletes

Un des contournements possible à la politique denyNonFastForwards consiste à simplement effacer la branche distante et à la repousser avec les nouvelles références. Pour interdire ceci, réglez receive.denyDeletes à true :

$ git config --system receive.denyDeletes true

Ceci interdit la suppression de branches ou d’étiquettes. Aucun utilisateur n’en a le droit. Pour pouvoir effacer des branches distantes, vous devez effacer manuellement les fichiers de rĂ©fĂ©rence sur le serveur. Il existe aussi des moyens plus intĂ©ressants de gĂ©rer cette politique utilisateur par utilisateur au moyen des listes de contrĂŽle d’accĂšs, point qui sera abordĂ© dans Exemple de politique gĂ©rĂ©e par Git.

scroll-to-top