Git 🌙
Chapters ▾ 2nd Edition

10.8 Dahili Git Ögeleri - Ortam Değişkenleri

Ortam Değişkenleri

Git her zaman bir bash kabuğu (shell) içinde çalışır ve nasıl davrandığını belirlemek için bir dizi shell ortam değişkeni kullanır. Arada sırada, bunların neler olduğunu bilmek ve Git’in istediğiniz gibi davranmasını sağlamak için nasıl kullanılabileceğini bilmek faydalı olabilir. Bu, Git’in dikkate aldığı tüm ortam değişkenlerinin tam bir listesi olmasa da en yararlı olanları ele alacağız.

Genel (Global) Davranış

Git’in genel davranışlarının bazıları, ortam değişkenlerine bağlıdır.

GIT_EXEC_PATH Git’in alt programlarını (örneğin git-commit, git-diff ve diğerleri) nerede arayacağını belirler. Mevcut ayarı git --exec-path komutunu çalıştırarak kontrol edebilirsiniz.

HOME genellikle özelleştirilebilir olarak kabul edilmez (çok fazla başka şey buna bağlıdır), ancak Git’in global yapılandırma dosyasını aradığı yerdir. Gerçekten taşınabilir bir Git kurulumu istiyorsanız, global yapılandırma ile birlikte taşınabilir Git’in shell profili içinde HOME 'u geçersiz kılabilirsiniz.

PREFIX benzer şekilde, sistem genel yapılandırması için kullanılır. Git, bu dosyayı $PREFIX/etc/gitconfig konumunda arar.

GIT_CONFIG_NOSYSTEM ayarlanmışsa, sistem genel yapılandırma dosyasının kullanımını devre dışı bırakır. Bu, sistem yapılandırmanızın komutlarınızı etkilediği ancak değiştirme veya kaldırma yetkinizin olmadığı durumlarda faydalıdır.

GIT_PAGER komut satırında çok sayfalı çıktıyı görüntülemek için kullanılan programı kontrol eder. Bu belirtilmemişse, yedek olarak PAGER kullanılır.

GIT_EDITOR kullanıcının bazı metinleri düzenlemesi gerektiğinde (örneğin bir katkı mesajı) başlatacağı düzenleyicidir. Manuel olarak ayarlanmadıysa EDITOR kullanılır.

Reponun Yeri

Git mevcut repo ile nasıl etkileşime gireceğini belirlemek için çeşitli ortam değişkenleri kullanır.

GIT_DIR .git klasörünün konumunu belirtir. Eğer belirtilmemişse, Git her adımda bir .git dizini arayarak dizin ağacı ~ veya /'ye ulaşana kadar yürür.

GIT_CEILING_DIRECTORIES .git dizinini arama davranışını kontrol eder. Yüklenmesi yavaş olan dizinlere erişiyorsanız (tape sürücüsündekiler veya yavaş bir ağ bağlantısındakiler gibi) ve özellikle kabuk komut isteminizi oluştururken Git çağrıldıysa, Git’ten denemeyi daha erken durdurmasını isteyebilirsiniz.

GIT_WORK_TREE yalın olmayan bir repo için çalışma dizini kökünün konumunu belirtir. Eğer --git-dir veya GIT_DIR belirtilmiş ancak --work-tree, GIT_WORK_TREE veya core.worktree belirtilmemişse; mevcut çalışma dizini, çalışma ağacınızın en üst düzeyi olarak kabul edilir.

GIT_INDEX_FILE (yalın olmayan repolar için) dizin dosyasının yolunu belirtir.

GIT_OBJECT_DIRECTORY genellikle .git/objects içinde bulunan dizinin konumunu belirtmek için kullanılabilir.

GIT_ALTERNATE_OBJECT_DIRECTORIES (biçimi /dir/bir:/dir/iki:… gibi biçimlendirilmiştir) iki noktalı çizgiyle ayrılmış bir listedir ve Git’e GIT_OBJECT_DIRECTORY dizininde olmayan nesneleri kontrol etmek için nereye bakılacağını söyler. Eğer aynı içeriğe sahip büyük dosyalara sahip birçok projeniz varsa, bu komut fazlalık kopyaları saklamaktan kaçınmak için de kullanılabilir.

Pathspec

Bir "pathspec", Git’te şeylere yol belirtme şeklinizi ifade eder ve joker karakterlerin kullanımını içerir. Bunlar .gitignore dosyasında ve aynı zamanda komut satırında da (git add *.c) kullanılır.

GIT_GLOB_PATHSPECS ve *`GIT_NOGLOB_PATHSPECS* joker karakterlerinin pathspecs içindeki varsayılan davranışını kontrol eder. GIT_GLOB_PATHSPECS 1’e ayarlanmışsa, joker karakterleri joker karakterleri olarak hareket eder (bu varsayılandır); GIT_NOGLOB_PATHSPECS 1’e ayarlanmışsa, joker karakterleri yalnızca kendilerine eşleşir, yani *.c gibi bir şey yalnızca bir dosya adı olan *.c ile eşleşir, .c ile biten herhangi bir dosyayla değil. Bu davranışı, pathspec’i :(glob) veya :(literal) ile başlatarak belirli durumlarda geçersiz kılabilirsiniz, örneğin :(glob)*.c.

GIT_LITERAL_PATHSPECS yukarıdaki davranışların her ikisini de devre dışı bırakır; joker karakterleri çalışmaz ve geçersiz kılma ön ekleri devre dışı bırakılır.

GIT_ICASE_PATHSPECS tüm pathspec’leri büyük-küçük harfe duyarsız bir şekilde çalışacak şekilde ayarlar.

Katkılama (Committing)

Git katkı nesnesinin nihai oluşturulması genellikle git-commit-tree tarafından yapılır ve bu ortam değişkenleri ana bilgi kaynağı olarak kullanılmaktadır. Bunlar mevcut değilse yapılandırma değerlerine geri düşer.

GIT_AUTHOR_NAME "yazar" alanındaki insanlarca okunabilir (human-readable) adı ayarlar.

GIT_AUTHOR_EMAIL "yazar" alanı için e-posta adresidir.

GIT_AUTHOR_DATE "yazar" alanı için kullanılan zaman damgasıdır.

GIT_COMMITTER_NAME "katkılayıcı" alanı için insan adını ayarlar.

GIT_COMMITTER_EMAIL "katkılayıcı" alanı için e-posta adresidir.

GIT_COMMITTER_DATE "katkılayıcı" alanındaki zaman damgasıdır.

EMAIL alanı user.email yapılandırma değeri ayarlanmamışsa yedek e-posta adresidir. Eğer bu ayarlanmamışsa, Git sistem kullanıcı ve ana bilgisayar adlarına geri düşer.

Ağ Oluşturma (Networking)

Git HTTP üzerinden ağ işlemleri yapmak için curl' kitaplığını kullanır, dolayısıyla *`GIT_CURL_VERBOSE* Git’e o kitaplık tarafından oluşturulan tüm mesajları yaymasını söyler. Bu, komut satırında curl -v işlemine benzer.

GIT_SSL_NO_VERIFY Git’e SSL sertifikalarını doğrulamamasını söyler. Git repolarına HTTPS üzerinden hizmet vermek için kendinden imzalı bir sertifika kullanıyorsanız veya bir Git sunucusu kuruyorsanız ancak henüz tam bir sertifika yüklemediyseniz bu bazen gerekli olabilir.

Bir HTTP işleminin veri hızı, GIT_HTTP_LOW_SPEED_TIME saniyeden daha uzun bir süre boyunca saniyede GIT_HTTP_LOW_SPEED_LIMIT bayttan düşükse, Git bu işlemi iptal edecektir. Bu değerler, http.lowSpeedLimit ve http.lowSpeedTime yapılandırma değerlerini geçersiz kılar.

GIT_HTTP_USER_AGENT, HTTP üzerinden iletişim kurarken Git tarafından kullanılan kullanıcı aracısı dizesini ayarlar. Varsayılan değer `git/2.0.0 gibi bir şeydir.

Fark Alma ve Birleştirme

GIT_DIFF_OPTS biraz yanlış bir isimdir. Geçerli olan tek değer, bir git diff komutunda gösterilen bağlam satırlarının sayısını kontrol eden -u<n> veya --unified=<n> değerleridir.

GIT_EXTERNAL_DIFF, diff.external yapılandırma değeri için geçersiz kılma olarak kullanılır. Ayarlanmışsa, Git git diff çağrıldığında bu programı çağıracaktır.

GIT_DIFF_PATH_COUNTER ve GIT_DIFF_PATH_TOTAL, GIT_EXTERNAL_DIFF veya diff.external tarafından belirtilen programın içinden kullanışlıdır. İlki, bir serideki hangi dosyanın farklılaştırıldığını temsil eder (1’den başlayarak), ikincisi ise toplu işteki toplam dosya sayısıdır.

GIT_MERGE_VERBOSITY özyinelemeli birleştirme stratejisinin çıktısını kontrol eder. İzin verilen değerler aşağıdaki gibidir:

  • 0 muhtemelen tek bir hata mesajı dışında hiçbir şey çıkarmaz.

  • 1 yalnızca çakışmaları gösterir.

  • 2 ayrıca dosya değişikliklerini de gösterir.

  • 3 dosyaların değişmediğinden dolayı atlandığını gösterir.

  • 4 işlenen tüm yolları gösterir.

  • 5 ve üzeri ayrıntılı hata ayıklama bilgilerini gösterir.

Varsayılan değer 2’dir.

Hata Ayıklama (Debugging)

Git’in gerçekten ne yaptığını mı bilmek istiyorsun? Git’in gömülü olarak oldukça kapsamlı bir izleme seti bulunur ve bunları etkinleştirmeniz yeterlidir. Bu değişkenlerin olası değerleri aşağıdaki gibidir:

  • ``true``, ``1``, veya ``2``: izleme kategorisi stderr’e yazılır.

  • / ile başlayan mutlak bir yol: izleme çıktısı o dosyaya yazılır.

  • GIT_TRACE* herhangi bir belirli kategoriye uymayan genel izlemeleri kontrol eder. Bu, takma adların genişlemesini ve diğer alt programlara delegasyonu içerir.

$ 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* paket dosyası erişiminin izlenmesini kontrol eder. İlk alan erişilen paket dosyasıdır, ikincisi ise bu dosyadaki konumdur:

$ 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* ağ işlemleri için paket düzeyinde izlemeyi etkinleştirir.

$ 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 verilerinin kaydedilmesini kontrol eder. Çıktı, her belirli git çağrısının ne kadar sürdüğünü gösterir.

$ 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 etkileşimde bulunduğu repo ve ortam hakkında keşfettiği bilgileri gösterir.

$ 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

Diğerleri

GIT_SSH (belirtilmişse) Git bir SSH ana bilgisayarına bağlanmaya çalıştığında ssh yerine çağrılan bir programdır. $GIT_SSH [kullanıcıadı@]host [-p <port>] <komut> şeklinde çağrılır. Bunun, ssh 'in nasıl çağrıldığını özelleştirmenin en kolay yolu olmadığını unutmayın; ek komut satırı parametrelerini desteklemez, bu nedenle bir sarıcı betik yazmak ve GIT_SSH 'i ona işaret etmek zorunda kalırsınız. Bunun yerine, ~/.ssh/config dosyasını kullanmak daha kolaydır.

GIT_ASKPASS core.askpass yapılandırma değerini geçersiz kılar. Bu Git’in kullanıcıdan kimlik bilgilerini sorması gerektiğinde çağrılan programdır ve bir komut satırı argümanı olarak bir metin işareti bekleyebilir ve cevabı stdout üzerinden döndürmelidir (Bu alt sistem hakkında daha fazla bilgi için Kimlik Bilgisi Depolama'e bakın).

GIT_NAMESPACE ad alanlı (namespace) referanslara erişimi kontrol eder ve --namespace bayrağına eşdeğerdir. Bu genellikle sunucu tarafında kullanışlıdır, tek bir repoya birden fazla çatallama depolamak isteyebilirsiniz, ancak referansları ayrı tutmayı tercih edebilirsiniz.

GIT_FLUSH Git’in stdout’a aşamalı olarak yazarken tamponlanmamış G/Ç kullanmasını zorlamak için kullanılabilir. 1 değeri Git’in daha sık sıvama yapmasını sağlar, 0 değeri tüm çıktının tamponlanmasına neden olur. Bu değişken belirtilmemişse varsayılan değer, etkinlik ve çıkış moduna bağlı olarak uygun bir tamponlama düzeni seçmektir.

GIT_REFLOG_ACTION reflog’a yazılacak açıklayıcı metni belirlemenizi sağlar. İşte bir örnek:

$ 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
scroll-to-top