Git
Chapters ▾ 2nd Edition

10.8 Git’in Daxili İşləri - Mühit Dəyişənləri

Mühit Dəyişənləri

Git həmişə bir bash shell-inin içərisində işləyir və necə davranacağını təyin etmək üçün bir sıra shell mühiti dəyişənlərindən istifadə edir. Bəzən bunların nə olduğunu və Git’in istədiyiniz kimi davranması üçün necə istifadə edilə biləcəyini bilmək çox faydalıdır. Bu, Git’in diqqət yetirdiyi bütün mühit dəyişənlərinin tam siyahısı deyil, ancaq biz ən faydalılarını əhatə edəcəyik.

Qlobal Davranış

Kompüter proqramı kimi Git’in bəzi ümumi davranışları ətraf mühit dəyişənlərindən asılıdır.

GIT_EXEC_PATH, Git’in alt proqramlarını harada axtardığını təyin edir (git-commit, git-diff və digərləri kimi). Hazırkı ayarı git --exec-path-i işə salaraq yoxlaya bilərsiniz.

HOME ümumiyyətlə fərdiləşdirilə bilməz (Çünki, çox şey ondan asılıdır), ancaq Git-in qlobal konfiqurasiya faylını axtardığı yerdir. Qlobal konfiqurasiya ilə tamamlanmış, həqiqətən portativ bir Git quraşdırma istəyirsinizsə, portativ Git-in shell profilindəki HOME seçimini ləğv edə bilərsiniz.

PREFIX bənzərdir, lakin sistem miqyasında konfiqurasiya üçündür. Git bu faylı $ PREFIX/etc/gitconfig-də axtarır.

GIT_CONFIG_NOSYSTEM, ayarlandığı təqdirdə, sistem səviyyəsində konfiqurasiya faylının istifadəsini dayandırır. Sistem konfiqurasiyanız əmrlərinizə müdaxilə edirsə, dəyişdirmək və ya silmək üçün girişiniz yoxdursa, onda bu faydalı olacaqdır.

GIT_PAGER əmr sətrində çox səhifəlik çıxışı göstərmək üçün istifadə olunan proqramı idarə edir. Bu ayarlanmayıbsa, PAGER geri dönüş kimi istifadə ediləcək.

GIT_EDITOR, istifadəçinin bəzi mətnləri düzəltməsi lazım olduqda (məsələn, commit mesajı) Git-in işə salacağı redaktordur. Ayarlanmadıqda isə, EDİTOR istifadə ediləcək.

Depo Yerləri

Git, cari depo ilə necə əlaqəli olduğunu müəyyən etmək üçün bir neçə mühit dəyişənlərindən istifadə edir.

GIT_DIR, .git qovluğunun yeridir. Bu göstərilməyibsə, Git hər bir addımda .git qovluğu axtararaq, ~ və ya /-a çatana qədər qovluq ağacını gəzir.

GIT_CEILING_DIRECTORIES, .git qovluğu axtarma davranışına nəzarət edir. Yüklənməsi ləng olan qovluqlara (məsələn, bir lent sürücüsündə və ya yavaş bir şəbəkə bağlantısı daxilində) daxil olsanız, xüsusilə shell istəyinizi qurarkən Git çağırıldığı təqdirdə, Git-dən başqa bir müddətdən əvvəl sınamağı dayandırmaq istəyə bilərsiniz.

GIT_WORK_TREE boş olmayan bir depo üçün iş qovluğunun kökünün yerləşməsidir. Əgər --git-dir və ya GIT_DIR göstərilsə də, --work-tree, GIT_WORK_TREE və ya core.worktree qeyd edilmirsə, cari iş qovluğu iş ağacınızın ən üst səviyyəsi sayılır.

GIT_INDEX_FILE indeks faylına gedən path-dır (yalnız boş olayan depolarda).

GIT_OBJECT_DIRECTORY ümumiyyətlə .git/objects-də yerləşən qovluğun yerini təyin etmək üçün istifadə edilə bilər.

GIT_ALTERNATE_OBJECT_DIRECTORIES Git-ə GIT_OBJECT_DIRECTORY-də olmadıqda obyektlərin harada yoxlanılacağını bildirən iki nöqtə ilə ayrılmış bir siyahıdır (`/dir/one:/dir/two:… ` kimi formatlaşdırılmışdır). Tamamilə eyni məzmuna sahib olan böyük faylları olan bir çox layihəniz olursa, bunların çox nüsxəsini saxlamamaq üçün istifadə edilə bilər.

Pathspec-lər

Bir pathspec, wildcards istifadəsi də daxil olmaqla Git-dəkilərə path-ları necə təyin etdiyinizə aiddir. Bunlar həm .gitignore faylında, həm də əmr sətrində (` git add * .c`) istifadə olunur.

GIT_GLOB_PATHSPECSGIT_NOGLOB_PATHSPECS wildcards-ın pathspecs-dəki standart davranışını idarə edir. Əgər GIT_GLOB_PATHSPECS 1 olaraq ayarlanırsa, wildcard simvolları wildcards rolunu oynayır (standart olaraq); GIT_NOGLOB_PATHSPECS 1-ə ayarlanmışsa, joker simvollar yalnız özləri ilə uyğunlaşır, yəni *.c adları .c ilə bitən hər hansı bir faylla deyil, yalnız named ``* .c” faylına uyğun gəlir. Bunu ayrı hallarda :(glob)*.c-də olduğu kimi :(glob) və ya :(hərfi) ilə başlayan path işarəsini ləğv edə bilərsiniz. GIT_LITERAL_PATHSPECS yuxarıdakı davranışların hər ikisini deaktiv edir; heç bir wildcard simvolu işləməyəcək və yalnış prefikslər də söndürülür.

GIT_ICASE_PATHSPECS bütün path xüsusiyyətlərini işlərə həssas olmayan bir şəkildə işləməyə quraşdırır.

Committing

Git commit obyektinin son yaradılması, ümumiyyətlə bu mühit dəyişənlərini əsas məlumat mənbəyi kimi istifadə edən və yalnız mövcud olmadıqda konfiqurasiya dəyərlərinə qayıdan git-commit-tree tərəfindən edilir.

GIT_AUTHOR_NAME ‘`author '’ sahəsindəki insan tərəfindən oxuna bilən addır.

GIT_AUTHOR_EMAIL “author” sahəsi üçün e-poçtdur.

GIT_AUTHOR_DATE “author” sahəsi üçün istifadə olunan zaman damğasıdır.

GIT_COMMITTER_NAME “committer” sahəsi üçün insan adı təyin edir.

GIT_COMMITTER_EMAIL “committer” sahəsi üçün e-poçtdur.

GIT_COMMITTER_DATE “committer” sahəsi üçün zaman damğasıdır.

EMAIL user.email konfiqurasiya dəyərinin təyin edilməməsi halında geri göndərilən e-poçt adresidir. this ayarlanmadıqda, Git sistem istifadəçisi və host adlarına qayıdır.

Networking

Git, HTTP üzərindən şəbəkə əməliyyatları aparmaq üçün curl kitabxanasından istifadə edir, buna görə də GIT_CURL_VERBOSE Git-ə həmin kitabxana tərəfindən yaradılan bütün mesajları buraxmasını söyləyir. Bu, əmr sətrində curl –v etməyə oxşayır.

GIT_SSL_NO_VERIFY Git-ə SSL sertifikatlarının təstiqlənməsini söyləyir. HTTPS üzərindən Git depolarına xidmət göstərmək üçün öz imzanızla təsdiqlənmiş bir sertifikat istifadə edirsinizsə və ya bir Git server quraşdırmasının ortasındasnızsa, lakin hələ tam bir sertifikat yükləməmisinizsə, bu bəzən lazım ola bilər.

Bir HTTP əməliyyatının məlumat dərəcəsi saniyədə GIT_HTTP_LOW_SPEED_TIME saniyədən uzun müddət ərzində GIT_HTTP_LOW_SPEED_LIMIT baytdan aşağı olarsa, Git bu əməliyyatı ləğv edəcəkdir. Bu dəyərlər http.lowSpeedLimit və` http.lowSpeedTime` konfiqurasiya dəyərlərini ləğv edir.

GIT_HTTP_USER_AGENT 12, HTTP üzərindən əlaqə qurarkən Git tərəfindən istifadə edilən istifadəçi agent sətirini təyin edir. Standartlıq git / 2.0.0 kimi bir dəyərdir.

Diffing and Birləşdirmə

GIT_DIFF_OPTS bir az səhvdir. Yalnız etibarlı dəyərlər, git diff əmrində göstərilən kontekst sətirlərinin sayını idarə edən -u <n> və ya ‘--unified = <n>’-dir.

GIT_EXTERNAL_DIFF diff.external konfiqurasiya dəyəri üçün yalnış olaraq istifadə olunur. Ayarlandığı təqdirdə, Git, git diff çağırıldıqda bu proqramı çağıracaqdır.

GIT_DIFF_PATH_COUNTERGIT_DIFF_PATH_TOTAL GIT_EXTERNAL_DIFF və ya diff.external tərəfindən təyin olunan proqramın içərisindən faydalıdır. Birincisi, bir seriyadakı hansı faylın fərqləndiyini göstərir (1-dən başlayaraq), ikincisi isə topludakı faylların ümumi sayını təşkil edir.

GIT_MERGE_VERBOSITY rekursiv birləşmə strategiyası üçün output-a nəzarət edir. İcazəli dəyərlər aşağıdakılardır:

  • 0, ehtimal ki, tək bir səhv mesajı xaricində heç bir şey çıxarmaz.

  • 1 yalnız konfliktləri göstərir.

  • 2 də fayl dəyişikliklərini göstərir.

  • 3 fayl dəyişmədiyi üçün skip olunduğunu göstərir.

  • 4 işləndikcə bütün path-ları göstərir.

  • 5 və yuxarısı ətraflı debugging məlumatlarını göstərir.

Standart dəyər 2-dir. ==== Debugging

really Git-in nə etdiyini bilmək istəyirsiniz? Git-in içərisində kifayət qədər əksiksiz bir iz var və yalnız bunları işə salmaq lazımdır. Bu dəyişənlərin mümkün qiymətləri aşağıdakılardır:

*``true", 1” və ya `2” - iz kateqoriyası stderr-ə yazılır. * "/ İlə başlayan mütləq path - trace output-u həmin fayla yazılacaqdır.

GIT_TRACE xüsusi bir kateqoriyaya yerləşməyən ümumi izləri idarə edir. Buraya taxma adların genişləndirilməsi və digər alt proqramlara nümayəndəlik daxildir.

$ 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 packfila-a girişin izlənilməsinə nəzarət edir. Birinci sahə əldə edilən packfile-dir, ikincisi həmin fayl içindəki offsetdir:

$ 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 şəbəkə əməliyyatları üçün paket səviyyəsində izləmə imkanı verir.

$ 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 performans məlumatlarının qeyd edilməsinə nəzarət edir. Output, hər bir xüsusi git çağırışının nə qədər çəkdiyini göstərir.

$ 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-in ünsiyyət qurduğu mühit və mühit haqqında nəyi kəşf etdiyi barədə məlumat göstərir.

$ 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

Miscellaneous

GIT_SSH, göstərildiyi təqdirdə, Git bir SSH host-na qoşulmağa çalışarkən ssh yerinə çağırılan bir proqramdır. $ GIT_SSH [istifadəçi adı @] host [-p <port>] <command> kimi çağırılır. Qeyd edək ki, bu, ssh-in necə çağırılacağını fərdiləşdirməyin ən asan yolu deyil; əlavə komanda sətri parametrlərini dəstəkləməyəcək, buna görə bir wrapper ssenarisi yazmalı və işarə etmək üçün GIT_SSH ayarlamalısınız. Bunun üçün sadəcə ~/.ssh/config faylını istifadə etmək daha asandır.

GIT_ASKPASS core.askpass konfiqurasiya dəyəri üçün keçiddir. Bu, Git-in istifadəçidən bir əmr sətri arqumenti kimi bir mətn istəməsini gözləyə bilən creditentals tələb etməsi lazım olan və stdout-da cavabı qaytarmalı olduğu zaman çağırılan proqramdır (bu alt sistem haqqında daha çox məlumat üçün buraya baxın: Etibarlı Yaddaş).

GIT_NAMESPACE ad boşluğuna daxil olan ref-lərə girişə nəzarət edir və --namespace bayrağına bərabərdir. Bu əsasən server tərəfində faydalıdır, burada tək bir depoda birdən çox hook saxlaya bilərsiniz, yalnız ref-ləri ayrı saxlamalısınız. GIT_FLUSH Git-i stdout-a tədricən yazarkən tamponlanmamış I/O istifadə etməyə məcbur etmək üçün istifadə edilə bilər. 1 dəyəri Git-in daha tez-tez yuyulmasına, 0 dəyəri bütün çıxışın tamponlanmasına səbəb olur. Standart dəyər (bu dəyişən təyin edilməyibsə), fəaliyyətə və çıxış rejiminə görə uyğun bir tamponlama sxemi seçməkdir.

GIT_REFLOG_ACTION reflog-a yazılmış təsviri mətni təyin etməyə imkan verir. Misal olaraq:

$ 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