Git
Chapters ▾ 2nd Edition

10.8 Гит изнутра - Променљиве окружења

Променљиве окружења

Програм Гит се увек извршава у bash љуски и користи већи број променљивих окружења које одређује његово понашање. Понекад је згодно знати које су и како могу да се употребе за прилагођење понашања програма Гит вашим потребама. Ово није потпуна листа свих променљивих окружења које програм Гит ослушкује, мада ћемо преставити оне најкорисније.

Глобално понашање

Нека од општих понашања програма Гит као компјутерског програма зависе од променљивих окружења.

GIT_EXEC_PATH одређује место на којем програм Гит тражи своје потпрограме (као што су git-commit, git-diff и остали). Тренутну вредност можете проверити ако извршите git --exec-path.

HOME се у општем случају не сматра за променљиву која треба да се прилагоди (превише осталих ствари зависи од ње), али она је место на којем програм Гит тражи свој глобални конфигурациони фајл. Ако желите заиста преносну инсталацију програма Гит, заједно са глобалном конфигурацијом, у профилу љуске преносног програма Гит можете да преиначите вредност HOME.

PREFIX је слична, само за конфигурацију на нивоу система. Програм Гит тражи овај фајл у $PREFIX/etc/gitconfig.

GIT_CONFIG_NOSYSTEM, ако је постављена, искључује употребу системског конфигурационог фајла. Ово је корисно ако системска конфигурација квари ваше команде, али немате дозволу да је измените или уклоните.

GIT_PAGER контролише програм који се користи у командној линији за приказ излаза у више страница. Ако није постављена, користиће се вредност променљиве PAGER.

GIT_EDITOR је едитор који програм Гит покреће када је потребно да корисник уреди неки текст (на пример, комит поруку). Ако није постављена, користиће се вредност променљиве EDITOR.

Локације репозиторијума

Програм Гит употребљава неколико променљивих окружења да одреди начин на који је у спрези са текућим репозиторијумом.

GIT_DIR је локација .git директоријума. Ако се не наведе, програм Гит обилази стабло директоријума навише све док не стигне у ~ или / и у сваком кораку покушава да нађе .git директоријум.

GIT_CEILING_DIRECTORIES контролише начин на који се тражи .git директоријум. Ако приступите директоријумима који се споро учитавају (као што су они који се налазе на уређају који чита и уписује по тракама, или преко споре мрежне везе), вероватно ћете хтети да Програм Гит прекине претрагу раније него иначе, посебно ако је програм Гит позван током изградње одзива ваше љуске.

GIT_WORK_TREE је локација корена радног директоријума за репозиторијум који није огољен. Ако се не наведе, користиће се директоријум родитељ $GIT_DIR директоријума.

GIT_INDEX_FILE је путања до индекс фајла (само за неогољене репозиторијуме).

GIT_OBJECT_DIRECTORY може да се користи за навођење локације директоријума чије је уобичајено место .git/objects.

GIT_ALTERNATE_OBJECT_DIRECTORIES је листа раздвојена двотачкама (форматирана као /дир/један:/дир/два:…) која програму Гит говори где да потражи објекте ако се не налазе у GIT_OBJECT_DIRECTORY директоријуму. Ако имате много пројеката са великим фајловима који имају потпуно исте садржаје, употребите ово како се не би чувало много копија тих фајлова.

Спецификације путања (Pathspecs)

„pathspec” се представља начин на који стварима у програму Гит наводите путање, укључујући и употребу џокера. Они се користе у .gitignore фајлу, али и на командној линији (git add *.c).

GIT_GLOB_PATHSPECS и GIT_NOGLOB_PATHSPECS контролишу подразумевано понашање џокера у спецификацијама путање. Ако се GIT_GLOB_PATHSPECS постави на 1, џокер карактери се понашају као џокери (што је и подразумевана вредност); ако се GIT_NOGLOB_PATHSPECS постави на 1, џокер карактери се подударају сами са собом, што значи да би се нешто као што је *.c подударило само са фајлом чије је име „\*.c”, а не са било којим фајлом чије се име завршава на .c. Ово можете да преиначите за појединачне случајеве тако што спецификацију путање почнете са :(glob) или :(literal), као у :(glob)\*.c.

GIT_LITERAL_PATHSPECS искључује оба претходна понашања; неће радити ниједан џокер карактер, а искључиће се и префикси за премошћавање.

GIT_ICASE_PATHSPECS поставља да све спецификације путања не праве разлику у величини слова.

Комитовање

Завршно креирање Гит комит објекта обично обавља git-commit-tree која користи ове променљиве окружења као свој примарни извор информација, а конфигурационим вредностима прибегава само у случају да нису присутне.

GIT_AUTHOR_NAME је читљиво име „author” поља.

GIT_AUTHOR_EMAIL је имејл за „author” поље.

GIT_AUTHOR_DATE је временска ознака која се користи за „author” поље.

GIT_COMMITTER_NAME поставља људско име за „committer” поље.

GIT_COMMITTER_EMAIL је имејл адреса за „committer” поље.

GIT_COMMITTER_DATE се користи за временску ознаку у „committer” пољу.

EMAIL је резервна имејл адреса у случају када није постављена конфигурациона вредност user.email. Ако ова није постављена, програм Гит прибегава именима системског корисника и хоста.

Умрежавање

Програм Гит за мрежне операције преко HTTP протокола користи curl библиотеку, тако да GIT_CURL_VERBOSE програму Гит говори да емитује све поруке које генерише та библиотека. Ово је слично са curl -v на командној линији.

GIT_SSL_NO_VERIFY говори програму Гит да не проверава SSL сертификате. Некада то може бити неопходно као на пример када за сервирање Гит репозиторијума преко HTTPS користите самопотписани сертификат, или ако се усред подешавања Гит сервера и још увек нисте инсталирали потпуни сертификат.

Ако је проток података HTTP операције мањи од GIT_HTTP_LOW_SPEED_LIMIT фајлова у секунди у периоду дужем од GIT_HTTP_LOW_SPEED_TIME секунди, програм Гит ће прекинути ту операцију. Ове вредности преиначују конфигурационе вредности http.lowSpeedLimit и http.lowSpeedTime.

GIT_HTTP_USER_AGENT поставља user-agent стринг који програм Гит користи када комуницира преко HTTP. Подразумевана вредност личи на git/2.0.0.

Прављење разлика и спајање

GIT_DIFF_OPTS је донекле нетачно име. Једине важеће вредности су -u<n> или --unified=<n> које контролишу број контекст линија које се приказују у излазу команде git diff.

GIT_EXTERNAL_DIFF се користи за премошћавање конфигурационе вредности diff.external. Ако је постављена, програм Гит ће покренути тај програм када извршите команду git diff.

GIT_DIFF_PATH_COUNTER и GIT_DIFF_PATH_TOTAL су корисне из програма који наведе GIT_EXTERNAL_DIFF или diff.external. Прва представља фајл из низа за који се ради разлика (почевши од 1), а друга укупан број фајлова у групи.

GIT_MERGE_VERBOSITY контролише излаз за рекурзивну стратегију спајања. Дозвољене су следеће вредности:

  • 0 нема никаквог излаза, осим можда једне поруке о грешки.

  • 1 приказују се само конфликти.

  • 2 приказују се и измене фајла.

  • 3 приказује када се фајлови прескоче јер нису били мењани.

  • 4 приказују се све путање онако како се обрађују.

  • 5 и веће приказује детаљне дибаг информације.

Подразумевана вредност је 2.

Дибаг

Желите заиста да знате шта је то програм Гит наумио? У програм Гит је уграђен прилично комплетан скуп трагова, па све што треба да урадите је да их укључите. Ево могућих вредности ових променљивих:

  • „true”, „1”, или „2” – категорија трага се исписује на stderr.

  • Апсолутна путања која почиње са / – излаз трага ће се уписати у тај фајл.

GIT_TRACE контролише опште трагове који не упадају ни у једну одређену категорију. То укључује развијање алијаса и делегирање другим потпрограмима.

$ 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 контролише праћење packfile приступа. Прво поље је packfile којем се приступа, а друго је померај унутар тог фајла:

$ 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 омогућава праћење мрежних операција на нивоу пакета.

$ 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 контролише како се логују подаци о перформанси. Излаз приказује колико траје извршавање неке одређене 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 приказује информације о ономе што програм Гит открива у вези репозиторијума и окружења са којим је у контакту.

$ 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

Разно

GIT_SSH, ако се наведе, то је програм који се уместо стандардне ssh команде позива онда када програм Гит покуша да се повеже са SSH хостом. Позива се као $GIT_SSH [корисничкоиме@]хост [-p <порт>] <команда>. Имајте на уму да ово није најједноставнији начин да се прилагоди начин на који се позива програм ssh; он не подржава додатне параметре командне линије, тако да ћете морати да напишете скрипту омотач и поставите да GIT_SSH показује на њу. It’s probably easier just to use the ~/.ssh/config file for that.

GIT_ASKPASS је премошћавање core.askpass конфигурационе вредности. Ово је програм који се позива кадгод програм Гит треба корисника да пита за акредитиве, који као аргумент командне линије може да прихвати текстуални одзив, а требало би да врати одговор на stdout (за више информација о овом подсистему, погледајте Складиште акредитива).

GIT_NAMESPACE контролише приступ референцама у простору имена и еквивалентна је са заставицом --namespace. Ово је углавном корисно на серверској страни када можете пожелети да у један репозиторијум сачувате више рачви једног јединог репозиторијума, чувајући одвојено само референце.

GIT_FLUSH може да се употреби да се програм Гит примора да када инкрементално уписује на stdout користи У/И који се не баферује. Вредност 1 наводи програм Гит да чешће спира податке, а вредност 0 чини да се сав излаз баферује. Подразумевана вредност (ако се ова променљива не постави) је изабрана тако да одговара шеми баферовања која зависи од активности и режима излаза.

GIT_REFLOG_ACTION вам омогућава да задате описни текст који се исписује у reflog. Ево примера:

$ 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