-
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
10.8 Les tripes de Git - Les variables dâenvironnement
Les variables dâenvironnement
Git sâexĂ©cute toujours dans un shell bash
, et utilise un certain nombre de variables dâenvironnement pour savoir comment se comporter.
Il est parfois pratique de savoir lesquelles, et la façon de les utiliser pour que Git se comporte comme vous le souhaitez.
Ceci nâest pas une liste exhaustive de toutes les variables dâenvironnement que Git utilise, mais nous allons voir les plus utiles.
Comportement général
Certains aspects du comportement gĂ©nĂ©ral de Git en tant que programme dĂ©pend de variables dâenvironnement.
GIT_EXEC_PATH
dĂ©termine lâendroit oĂč Git va chercher ses sous-programmes (comme git-commit
, git-diff
, et dâautres).
Vous pouvez vérifier le réglage actuel en lançant git --exec-path
.
HOME
nâest pas en gĂ©nĂ©ral considĂ©rĂ©e comme modifiable (trop dâautres choses en dĂ©pendent), mais câest lâendroit oĂč Git va chercher le fichier de configuration gĂ©nĂ©ral (global).
Si vous voulez une installation de Git vraiment portable, complÚte du point de vue de la configuration générale, vous pouvez surcharger HOME
dans le profil (profile).
PREFIX
est lâĂ©quivalent pour la configuration au niveau du systĂšme.
Git va chercher le fichier $PREFIX/etc/gitconfig
.
GIT_CONFIG_NOSYSTEM
, si elle est dĂ©finie, invalide lâutilisation du fichier de configuration au niveau du systĂšme.
Cette variable est utile si la configuration systĂšme interfĂšre avec vos commandes et que vous nâavez pas les privilĂšges pour la changer ou la supprimer.
GIT_PAGER
contrÎle le programme que vous utilisez pour afficher les résultats sur plusieurs pages à la ligne de commande.
Si elle nâest pas dĂ©finie, Git utilisera PAGER
Ă la place.
GIT_EDITOR
est lâĂ©diteur lancĂ© par Git quand lâutilisateur doit taper du texte (un message de commit par exemple).
Si elle nâest pas dĂ©finie, Git utilisera EDITOR
.
Les emplacements du dépÎt
Git utilise plusieurs variables dâenvironnement pour dĂ©terminer comment interagir avec le dĂ©pĂŽt courant.
GIT_DIR
est lâemplacement du rĂ©pertoire .git
.
Sâil nâest pas spĂ©cifiĂ©, Git remonte lâarbre des rĂ©pertoires jusquâĂ ce quâil arrive Ă ~
ou bien /
, en cherchant un répertoire .git
Ă chaque Ă©tape.
GIT_CEILING_DIRECTORIES
contrĂŽle le comportement de Git pendant la recherche dâun rĂ©pertoire .git
.
Si vous ĂȘtes sur des rĂ©pertoires qui se chargent lentement (par exemple sur une bande magnĂ©tique ou Ă travers une connexion rĂ©seau lente), vous pouvez souhaiter que Git sâarrĂȘte plus tĂŽt quâil ne le ferait habituellemnt, surtout si Git est appelĂ© Ă la construction de votre appel shell (prompt).
GIT_WORK_TREE
est lâemplacement de la racine du rĂ©pertoire de travail pour un dĂ©pĂŽt non nu.
Si cette variable nâest pas spĂ©cifiĂ©e, câest le rĂ©pertoire parent de $GIT_DIR
qui est utilisé.
GIT_INDEX_FILE
est le chemin du fichier dâindex (uniquement pour les dĂ©pĂŽts non nus).
GIT_OBJECT_DIRECTORY
peut ĂȘtre utilisĂ© pour spĂ©cifier lâemplacement du rĂ©pertoire qui se trouve habituellement Ă .git/objects
.
GIT_ALTERNATE_OBJECT_DIRECTORIES
est une liste sĂ©parĂ©e par des « : » (formattĂ©e comme ceci : /rep/un:/rep/deux:âŠ
) qui dit Ă Git oĂč trouver les objets sâils ne sont pas dans GIT_OBJECT_DIRECTORY
.
Sâil vous arrive dâavoir beaucoup de projets avec des gros fichiers ayant exactement le mĂȘme contenu, cette variable peut vous Ă©viter dâen garder trop de copies.
Pathspecs
Une "pathspec" fait rĂ©fĂ©rence Ă la façon dont on spĂ©cifie les chemins dans Git, y compris lâutilisation des jokers.
Ils sont utilisés dans le fichier .gitignore
, mais Ă©galement Ă la ligne de commande (git add \*.c
).
GIT_GLOB_PATHSPECS
et GIT_NOGLOB_PATHSPECS
contrÎlent le comportement par défaut des jokers dans les pathspecs.
Si GIT_GLOB_PATHSPECS
vaut 1, les caractÚres jokers agissent comme des jokers (ce qui est le comportement par défaut) ; si GIT_NOGLOB_PATHSPECS
vaut 1, les caractĂšres jokers ne correspondent quâĂ eux-mĂȘme, ce qui veut dire que quelque chose comme *.c
ne correspondrait quâĂ un fichier nommĂ© « \*.c », et non pas tout fichier dont le nom se termine par .c
.
Vous pouvez surcharger ce comportement pour certains cas en faisant commencer la pathspec par :(glob)
pour utiliser le joker, ou bien :(literal)
pour une correspondance stricte, comme dans :(glob)\*.c
.
GIT_LITERAL_PATHSPECS
empĂȘche ces deux comportements ; aucun joker ne fonctionnera, et les prĂ©fixes de surcharge seront Ă©galement inopĂ©rants.
GIT_ICASE_PATHSPECS
rend toutes les pathspecs insensibles Ă la casse.
Création de commits
La crĂ©ation finale dâun objet Git commit est habituellement faite par git-commit-tree
, qui utilise les variables dâenvironnement suivantes comme premiĂšre source dâinformation, se repliant sur les valeurs de configuration seulement si celles-ci ne sont pas prĂ©sentes :
GIT_AUTHOR_NAME
est le nom lisible par un humain dans le champ « Auteur » (author).
GIT_AUTHOR_EMAIL
est lâadresse de courriel pour le champ « Auteur ».
GIT_AUTHOR_DATE
est lâhorodatage utilisĂ© pourle champ « Auteur ».
GIT_COMMITTER_NAME
définit le nom humain pour le champ « Validateur » (commiter).
GIT_COMMITTER_EMAIL
est lâadresse de courriel pour le champ « Validateur ».
GIT_COMMITTER_DATE
est utilisĂ© pour lâhorodatage dans le champ « Validateur ».
EMAIL
est lâadresse de courriel de repli pour le cas oĂč la valeur de configuration user.email
nâest pas dĂ©finie.
Si celle-ci nâest pas dĂ©finie, Git se replie sur les noms dâutilisateur systĂšme et dâhĂŽte.
Travail sur le réseau
Git utilise la bibliothĂšque curl
pour effectuer des opérations sur HTTP, ainsi GIT_CURL_VERBOSE
demande Ă Git dâĂ©mettre tous les messages gĂ©nĂ©rĂ©s par cette bibliothĂšque.
Câest similaire Ă curl -v
en ligne de commande.
GIT_SSL_NO_VERIFY
demande à Git de ne pas vérifier les certificats SSL.
Cela peut ĂȘtre parfois nĂ©cessaire si vous utilisez des certificats auto-signĂ©s pour servir des dĂ©pĂŽts Git sur HTTPS, ou si vous ĂȘtes au milieu de lâinstallation dâun serveur Git mais nâavez pas encore installĂ© un certificat complet.
Si le taux de donnĂ©es dâune opĂ©ration HTTP est plus basse que GIT_HTTP_LOW_SPEED_LIMIT
octets par seconde pendant plus longtemps que GIT_HTTP_LOW_SPEED_TIME
secondes, Git annulera cette opération.
Ces valeurs surchargent les valeurs de configuration http.lowSpeedLimit
et http.lowSpeedTime
.
GIT_HTTP_USER_AGENT
dĂ©finit la chaĂźne dâagent utilisateur utilisĂ©e par Git quand il communique sur HTTP.
La valeur par défaut est quelque chose comme git/2.0.0
.
Visualisation des différences et Fusion
GIT_DIFF_OPTS
est un terme un peu inapproprié.
Les seules valeurs valides sont -u<n>
ou --unified=<n>
, qui contrÎlent le nombre de lignes de contexte affichées dans une commande git diff
.
GIT_EXTERNAL_DIFF
est utilisée comme une surcharge de la valeur de configuration diff.external
.
Si elle est définie, Git invoquera ce programme quand git diff
sera invoquée.
GIT_DIFF_PATH_COUNTER
et GIT_DIFF_PATH_TOTAL
sont utiles Ă lâintĂ©rieur du programme spĂ©cifiĂ© par GIT_EXTERNAL_DIFF
ou diff.external
.
Le premier represente le fichier de la série dont on est en train de visualiser les différences (en commençant par 1), et le dernier est le nombre total de fichiers dans le lot.
GIT_MERGE_VERBOSITY
contrÎle la sortie pour la stratégie de fusion récursive.
Les valeurs admises sont les suivantes :
-
0 ne sort rien, sauf Ă©ventuellement un seul message dâerreur.
-
1 ne montre que les conflits.
-
2 montre aussi les modifications de fichier.
-
3 montre quand les fichiers sont sautĂ©s parce quâils nâont pas changĂ©.
-
4 montre tous les chemins qui sont en train dâĂȘtre traitĂ©s.
-
5 et au-delà montrent des informations détaillées de débogage.
La valeur par défaut est 2.
DĂ©bogage
Vous voulez vraiment savoir de quoi Git est capable ? Git comprend un ensemble de traces assez complet, et tout ce que vous avez à faire est de les activer. Les valeurs possibles de ces variables sont les suivantes :
-
« true », « 1 » ou « 2 » â la catĂ©gorie de trace est Ă©crite sur la sortie dâerreur standard (stderr).
-
Un chemin absolu commençant par
/
â la sortie de trace sera Ă©crite dans ce fichier.
GIT_TRACE
contrÎle les traces générales, qui ne rentrent dans aucune catégorie spécifique.
Cela inclut le développement des alias et la délégation aux autres sous-programmes.
$ GIT_TRACE=true git lga
20:12:49.877982 git.c:554 trace: exec: 'git-lga'
20:12:49.878369 run-command.c:341 trace: run_command: 'git-lga'
20:12:49.879529 git.c:282 trace: alias expansion: lga => 'log' '--graph' '--pretty=oneline' '--abbrev-commit' '--decorate' '--all'
20:12:49.879885 git.c:349 trace: built-in: git 'log' '--graph' '--pretty=oneline' '--abbrev-commit' '--decorate' '--all'
20:12:49.899217 run-command.c:341 trace: run_command: 'less'
20:12:49.899675 run-command.c:192 trace: exec: 'less'
GIT_TRACE_PACK_ACCESS
contrĂŽle le traçage dâaccĂšs aux fichiers groupĂ©s.
Le premier champ est le fichier groupĂ© auquel on est en train dâaccĂ©der, le second est le dĂ©calage dans ce fichier :
$ GIT_TRACE_PACK_ACCESS=true git status
20:10:12.081397 sha1_file.c:2088 .git/objects/pack/pack-c3fa...291e.pack 12
20:10:12.081886 sha1_file.c:2088 .git/objects/pack/pack-c3fa...291e.pack 34662
20:10:12.082115 sha1_file.c:2088 .git/objects/pack/pack-c3fa...291e.pack 35175
# [âŠ]
20:10:12.087398 sha1_file.c:2088 .git/objects/pack/pack-e80e...e3d2.pack 56914983
20:10:12.087419 sha1_file.c:2088 .git/objects/pack/pack-e80e...e3d2.pack 14303666
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
GIT_TRACE_PACKET
permet le traçage au niveau paquet pour les opérations sur le réseau.
$ GIT_TRACE_PACKET=true git ls-remote origin
20:15:14.867043 pkt-line.c:46 packet: git< # service=git-upload-pack
20:15:14.867071 pkt-line.c:46 packet: git< 0000
20:15:14.867079 pkt-line.c:46 packet: git< 97b8860c071898d9e162678ea1035a8ced2f8b1f HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed no-done symref=HEAD:refs/heads/master agent=git/2.0.4
20:15:14.867088 pkt-line.c:46 packet: git< 0f20ae29889d61f2e93ae00fd34f1cdb53285702 refs/heads/ab/add-interactive-show-diff-func-name
20:15:14.867094 pkt-line.c:46 packet: git< 36dc827bc9d17f80ed4f326de21247a5d1341fbc refs/heads/ah/doc-gitk-config
# [âŠ]
GIT_TRACE_PERFORMANCE
contrĂŽle la journalisation dâinformation de performance.
La sortie montre combien de temps prend chaque invocation particulĂšre de Git.
$ GIT_TRACE_PERFORMANCE=true git gc
20:18:19.499676 trace.c:414 performance: 0.374835000 s: git command: 'git' 'pack-refs' '--all' '--prune'
20:18:19.845585 trace.c:414 performance: 0.343020000 s: git command: 'git' 'reflog' 'expire' '--all'
Counting objects: 170994, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (43413/43413), done.
Writing objects: 100% (170994/170994), done.
Total 170994 (delta 126176), reused 170524 (delta 125706)
20:18:23.567927 trace.c:414 performance: 3.715349000 s: git command: 'git' 'pack-objects' '--keep-true-parents' '--honor-pack-keep' '--non-empty' '--all' '--reflog' '--unpack-unreachable=2.weeks.ago' '--local' '--delta-base-offset' '.git/objects/pack/.tmp-49190-pack'
20:18:23.584728 trace.c:414 performance: 0.000910000 s: git command: 'git' 'prune-packed'
20:18:23.605218 trace.c:414 performance: 0.017972000 s: git command: 'git' 'update-server-info'
20:18:23.606342 trace.c:414 performance: 3.756312000 s: git command: 'git' 'repack' '-d' '-l' '-A' '--unpack-unreachable=2.weeks.ago'
Checking connectivity: 170994, done.
20:18:25.225424 trace.c:414 performance: 1.616423000 s: git command: 'git' 'prune' '--expire' '2.weeks.ago'
20:18:25.232403 trace.c:414 performance: 0.001051000 s: git command: 'git' 'rerere' 'gc'
20:18:25.233159 trace.c:414 performance: 6.112217000 s: git command: 'git' 'gc'
GIT_TRACE_SETUP
montre des informations sur ce que Git dĂ©couvre sur le dĂ©pĂŽt et lâenvironnement avec lequel il interagit.
$ GIT_TRACE_SETUP=true git status
20:19:47.086765 trace.c:315 setup: git_dir: .git
20:19:47.087184 trace.c:316 setup: worktree: /Users/ben/src/git
20:19:47.087191 trace.c:317 setup: cwd: /Users/ben/src/git
20:19:47.087194 trace.c:318 setup: prefix: (null)
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Divers
GIT_SSH
, si spécifié, est un programme qui est invoqué à la place de ssh
quand Git essaie de se connecter Ă un hĂŽte SSH.
Il est invoqué comme $GIT_SSH [username@]host [-p <port>] <command>
.
Notez que ce nâest pas le moyen le plus facile de personnaliser la façon dont ssh est invoquĂ©Â ; il ne prendra pas en compte des paramĂštres supplĂ©mentaires en ligne de commande, donc vous devriez Ă©crire un script lâenveloppant et faire pointer GIT_SSH
dessus.
Il est sans doute plus facile dâutiliser le fichier ~/.ssh/config
pour cela.
GIT_ASKPASS
est une surcharge pour la valeur de configuration core.askpass
.
Câest le programme invoquĂ© lorsque Git Ă besoin de demander ses identifiants Ă lâutilisateur, qui peut sâattendre Ă un texte comme argument en ligne de commande, et qui devrait retourner la rĂ©ponse sur la sortie standard (stdout
).
(Consultez Stockage des identifiants pour plus dâinformation sur ce sous-systĂšme.)
GIT_NAMESPACE
contrĂŽle lâaccĂšs des rĂ©fĂ©rences cloisonnĂ©es dans des espaces de nom, et est Ă©quivalent Ă lâoption --namespace
.
Câest surtout utile cĂŽtĂ© serveur, oĂč vous pourriez vouloir stocker plusieurs bifurcations (forks) dâun seul dĂ©pĂŽt dans un seul dĂ©pĂŽt, en gardant seulement les rĂ©fĂ©rences sĂ©parĂ©es.
GIT_FLUSH
peut ĂȘtre utilisĂ©e pour forcer Git Ă utiliser des entrĂ©es/sorties non mises en mĂ©moire tampon (buffer) quand il Ă©crit progressivement dans la sortie standard.
Une valeur de 1 fait que Git évacue (flush) plus souvent, une valeur de 0 fait que la sortie est mise en mémoire tampon.
La valeur par dĂ©faut (si la variable nâest pas dĂ©finie) est Ă choisir selon un plan appropriĂ© de mise en mĂ©moire tampon en fonction de lâactivitĂ© et du mode de sortie.
GIT_REFLOG_ACTION
vous permet de spécifier le texte descriptif écrit dans le reflog
.
Voici un exemple :
$ GIT_REFLOG_ACTION="my action" git commit --allow-empty -m 'my message'
[master 9e3d55a] my message
$ git reflog -1
9e3d55a HEAD@{0}: my action: my message