-
1. DĂ©marrage rapide
-
2. Les bases de Git
-
3. Les branches avec Git
-
4. Git sur le serveur
- 4.1 Protocoles
- 4.2 Installation de Git sur un serveur
- 4.3 Génération des clés publiques SSH
- 4.4 Mise en place du serveur
- 4.5 DĂ©mon (Daemon) Git
- 4.6 HTTP intelligent
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git hébergé
- 4.10 Résumé
-
5. Git distribué
-
6. GitHub
-
7. Utilitaires Git
- 7.1 SĂ©lection des versions
- 7.2 Indexation interactive
- 7.3 Remisage et nettoyage
- 7.4 Signer votre travail
- 7.5 Recherche
- 7.6 RĂ©Ă©crire lâhistorique
- 7.7 Reset démystifié
- 7.8 Fusion avancée
- 7.9 Rerere
- 7.10 DĂ©boguer avec Git
- 7.11 Sous-modules
- 7.12 Empaquetage (bundling)
- 7.13 Replace
- 7.14 Stockage des identifiants
- 7.15 Résumé
-
8. Personnalisation de Git
- 8.1 Configuration de Git
- 8.2 Attributs Git
- 8.3 Crochets Git
- 8.4 Exemple de politique gérée par Git
- 8.5 Résumé
-
9. Git et les autres systĂšmes
- 9.1 Git comme client
- 9.2 Migration vers Git
- 9.3 Résumé
-
10. Les tripes de Git
- 10.1 Plomberie et porcelaine
- 10.2 Les objets de Git
- 10.3 Références Git
- 10.4 Fichiers groupés
- 10.5 La refspec
- 10.6 Les protocoles de transfert
- 10.7 Maintenance et récupération de données
- 10.8 Les variables dâenvironnement
- 10.9 Résumé
-
A1. Annexe A: Git dans dâautres environnements
- A1.1 Interfaces graphiques
- A1.2 Git dans Visual Studio
- A1.3 Git dans Visual Studio Code
- A1.4 Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git dans Sublime Text
- A1.6 Git dans Bash
- A1.7 Git dans Zsh
- A1.8 Git dans PowerShell
- A1.9 Résumé
-
A2. Annexe B: Embarquer Git dans vos applications
- A2.1 Git en ligne de commande
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Commandes Git
- A3.1 Installation et configuration
- A3.2 Obtention et création des projets
- A3.3 Capture dâinstantanĂ© basique
- A3.4 Création de branches et fusion
- A3.5 Partage et mise Ă jour de projets
- A3.6 Inspection et comparaison
- A3.7 DĂ©bogage
- A3.8 Patchs
- A3.9 Courriel
- A3.10 SystĂšmes externes
- A3.11 Administration
- A3.12 Commandes de plomberie
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 |
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 :
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.