Skip to content

Latest commit

 

History

History
199 lines (135 loc) · 14.2 KB

File metadata and controls

199 lines (135 loc) · 14.2 KB

Variables d’Entorn

Git sempre s’executa dins d’una shell bash i utilitza diverses variables d’entorn de la shell per determinar com es comporta. De vegades, és útil conèixer aquestes variables i com es poden utilitzar per fer que Git es comporti de la manera que desitgeu. Aquesta no és una llista exhaustiva de totes les variables d’entorn a les quals Git presta atenció, però cobrirem les més útils.

Comportament Global

Algunes de les conductes generals de Git com a programa informàtic depenen de les variables d’entorn.

GIT_EXEC_PATH determina on Git busca els seus subprogrames (com git-commit, git-diff, i altres). Podeu comprovar la configuració actual executant git --exec-path.

HOME normalment no es considera personalitzable (moltes altres coses en depenen), però és on Git busca el fitxer de configuració global. Si voleu una instal·lació de Git realment portàtil, completa amb configuració global, podeu substituir HOME al perfil de la shell del Git portàtil.

PREFIX és similar, però per a la configuració de tot el sistema. Git busca aquest fitxer a $PREFIX/etc/gitconfig.

GIT_CONFIG_NOSYSTEM, si està establert, desactiva l’ús del fitxer de configuració de tot el sistema. Això és útil si la vostra configuració del sistema interfereix amb les vostres comandes, però no teniu accés per canviar-la o eliminar-la.

GIT_PAGER controla el programa utilitzat per mostrar la sortida de diverses pàgines a la línia de comandes. Si això no està establert, es farà servir PAGER com a recurs.

GIT_EDITOR és l’editor que Git llançarà quan l’usuari necessiti editar algun text (per exemple, un missatge de confirmació). Si no està establert, es farà servir EDITOR.

Ubicacions del Repositori

Git utilitza diverses variables d’entorn per determinar com interactua amb el repositori actual.

GIT_DIR és la ubicació de la carpeta .git. Si això no està especificat, Git recorre l’arbre de directoris fins que arriba a ~ o /, buscant un directori .git en cada pas.

GIT_CEILING_DIRECTORIES controla el comportament de la cerca d’un directori .git. Si accediu a directoris que són lents de carregar (com els d’una unitat de cinta o a través d’una connexió de xarxa lenta), potser voleu que Git deixi de intentar-ho abans del que ho faria normalment, especialment si Git s’invoca en construir el vostre prompt de shell.

GIT_WORK_TREE és la ubicació de l’arrel del directori de treball per a un repositori no nu. Si s’especifica --git-dir o GIT_DIR però cap de --work-tree, GIT_WORK_TREE o core.worktree, el directori de treball actual es considera el nivell superior del vostre arbre de treball.

GIT_INDEX_FILE és la ruta al fitxer d’índex (només per a repositoris no nus).

GIT_OBJECT_DIRECTORY es pot utilitzar per especificar la ubicació del directori que normalment resideix a .git/objects.

GIT_ALTERNATE_OBJECT_DIRECTORIES és una llista separada per dos punts (formatada com /dir/one:/dir/two:…) que indica a Git on buscar objectes si no estan a GIT_OBJECT_DIRECTORY. Si teniu molts projectes amb fitxers grans que tenen el mateix contingut exacte, això es pot utilitzar per evitar emmagatzemar massa còpies.

Pathspecs

Un “pathspec” es refereix a com especifiqueu les rutes de les coses a Git, incloent-hi l’ús de comodins. Aquests s’utilitzen al fitxer .gitignore, però també a la línia de comandes (git add *.c).

GIT_GLOB_PATHSPECS i GIT_NOGLOB_PATHSPECS controlen el comportament per defecte dels comodins als pathspecs. Si GIT_GLOB_PATHSPECS està establert a 1, els caràcters comodí actuen com a comodins (que és el valor per defecte); si GIT_NOGLOB_PATHSPECS està establert a 1, els caràcters comodí només coincideixen amb ells mateixos, cosa que significa que alguna cosa com *.c només coincidiria amb un fitxer anomenat “\*.c”, en lloc de qualsevol fitxer el nom del qual acabi amb .c. Podeu substituir això en casos individuals començant el pathspec amb :(glob) o :(literal), com a :(glob)\*.c.

GIT_LITERAL_PATHSPECS desactiva els dos comportaments anteriors; cap caràcter comodí funcionarà, i els prefixos de substitució també estan desactivats.

GIT_ICASE_PATHSPECS estableix tots els pathspecs per treballar de manera insensible a majúscules i minúscules.

Confirmació

La creació final d’un objecte de confirmació de Git normalment es fa mitjançant git-commit-tree, que utilitza aquestes variables d’entorn com a font principal d’informació, recorrint als valors de configuració només si aquestes no estan presents.

GIT_AUTHOR_NAME és el nom llegible per humans al camp “author”.

GIT_AUTHOR_EMAIL és el correu electrònic per al camp “author”.

GIT_AUTHOR_DATE és la marca de temps utilitzada per al camp “author”.

GIT_COMMITTER_NAME estableix el nom humà per al camp “committer”.

GIT_COMMITTER_EMAIL és l’adreça de correu electrònic per al camp “committer”.

GIT_COMMITTER_DATE s’utilitza per a la marca de temps al camp “committer”.

EMAIL és l’adreça de correu electrònic de recanvi en cas que el valor de configuració user.email no estigui establert. Si això no està establert, Git recorre als noms d’usuari i d’amfitrió del sistema.

Xarxa

Git utilitza la biblioteca curl per fer operacions de xarxa a través d’HTTP, així que GIT_CURL_VERBOSE indica a Git que emeti tots els missatges generats per aquesta biblioteca. Això és similar a fer curl -v a la línia de comandes.

GIT_SSL_NO_VERIFY indica a Git que no verifiqui els certificats SSL. Això de vegades pot ser necessari si esteu utilitzant un certificat autofirmat per servir repositoris Git a través d’HTTPS, o esteu enmig de configurar un servidor Git però encara no heu instal·lat un certificat complet.

Si la taxa de dades d’una operació HTTP és inferior a GIT_HTTP_LOW_SPEED_LIMIT bytes per segon durant més de GIT_HTTP_LOW_SPEED_TIME segons, Git avortarà aquesta operació. Aquests valors substitueixen els valors de configuració http.lowSpeedLimit i http.lowSpeedTime.

GIT_HTTP_USER_AGENT estableix la cadena d’agent d’usuari utilitzada per Git en comunicar-se a través d’HTTP. El valor per defecte és un valor com git/2.0.0.

Diferències i Fusió

GIT_DIFF_OPTS és una mica un nom equivocat. Els únics valors vàlids són -u<n> o --unified=<n>, que controlen el nombre de línies de context mostrades en una comanda git diff.

GIT_EXTERNAL_DIFF s’utilitza com una substitució del valor de configuració diff.external. Si està establert, Git invocarà aquest programa quan s’invoca git diff.

GIT_DIFF_PATH_COUNTER i GIT_DIFF_PATH_TOTAL són útils des de dins del programa especificat per GIT_EXTERNAL_DIFF o diff.external. L’anterior representa quin fitxer en una sèrie s’està diferenciant (començant per 1), i l’últim és el nombre total de fitxers al lot.

GIT_MERGE_VERBOSITY controla la sortida per a l’estratègia de fusió recursiva. Els valors permesos són els següents:

  • 0 no mostra res, excepte possiblement un únic missatge d’error.

  • 1 mostra només conflictes.

  • 2 també mostra canvis de fitxers.

  • 3 mostra quan els fitxers s’ometen perquè no han canviat.

  • 4 mostra totes les rutes a mesura que es processen.

  • 5 i superior mostren informació de depuració detallada.

El valor per defecte és 2.

Depuració

Voleu saber realment què està fent Git? Git té un conjunt bastant complet de traces incrustades, i tot el que heu de fer és activar-les. Els possibles valors d’aquestes variables són els següents:

  • “true”, “1”, o “2” – la categoria de traça s’escriu a stderr.

  • Una ruta absoluta que comença amb / – la sortida de la traça s’escriurà a aquest fitxer.

GIT_TRACE controla traces generals, que no s’ajusten a cap categoria específica. Això inclou l’expansió d’àlies i la delegació a altres subprogrames.

$ 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 controla el rastreig de l’accés al packfile. El primer camp és el packfile al qual s’accedeix, el segon és el desplaçament dins d’aquest fitxer:

$ 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 habilita el rastreig a nivell de paquet per a operacions de xarxa.

$ 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 controla el registre de dades de rendiment. La sortida mostra quant de temps triga cada invocació particular 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 mostra informació sobre què està descobrint Git sobre el repositori i l’entorn amb els quals està interactuant.

$ 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

Diversos

GIT_SSH, si s’especifica, és un programa que s’invoca en lloc de ssh quan Git intenta connectar-se a un host SSH. S’invoca com $GIT_SSH [username@]host [-p <port>] <command>. Tingueu en compte que aquesta no és la manera més fàcil de personalitzar com s’invoca ssh; no admet paràmetres addicionals de la línia de comandes. Per admetre paràmetres addicionals de la línia de comandes, podeu utilitzar GIT_SSH_COMMAND, escriure un script d’embolcall i establir GIT_SSH per apuntar-hi o utilitzar el fitxer ~/.ssh/config.

GIT_SSH_COMMAND estableix la comanda SSH utilitzada quan Git intenta connectar-se a un host SSH. La comanda és interpretada per la shell, i es poden utilitzar arguments addicionals de la línia de comandes amb ssh, com ara GIT_SSH_COMMAND="ssh -i ~/.ssh/my_key" git clone git@example.com:my/repo.

GIT_ASKPASS és una substitució del valor de configuració core.askpass. Aquest és el programa invocat sempre que Git necessiti demanar a l’usuari les credencials, que pot esperar un prompt de text com a argument de la línia de comandes, i hauria de retornar la resposta a stdout (vegeu ch07-git-tools.asc per a més informació sobre aquest subsistema).

GIT_NAMESPACE controla l’accés a les referències amb espai de noms, i és equivalent a la bandera --namespace. Això és especialment útil al costat del servidor, on potser voleu emmagatzemar diverses bifurcacions d’un únic repositori en un repositori, mantenint només les referències separades.

GIT_FLUSH es pot utilitzar per forçar Git a utilitzar E/S no emmagatzemada en memòria càrrega quan s’escriu incrementalment a stdout. Un valor de 1 fa que Git buidi més sovint, un valor de 0 fa que tota la sortida es emmagatzemi en memòria càrrega. El valor per defecte (si aquesta variable no està establerta) és triar un esquema d’emmagatzematge en memòria càrrega adequat en funció de l’activitat i el mode de sortida.

GIT_REFLOG_ACTION us permet especificar el text descriptiu escrit al reflog. Aquí teniu 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