Git çekirdek geliştiricileri Git’i nasıl yapılandırıp kullanıyor?
(blog.gitbutler.com)- "Pro Git" yazarı Scott Chacon, küresel olarak etkinleştirdiği bazı Git ayarlarını ve bunların nedenlerini açıklıyor
- Ayarların çoğu, doğrudan Git çekirdek kod tabanı üzerinde çalışan geliştiricilerden öğrenilmiş
- Aşağıda, Git’i daha iyi hale getiren
~/.gitconfigayarları yer alıyor[column] ui = auto [branch] sort = -committerdate [tag] sort = version:refname [init] defaultBranch = main [diff] algorithm = histogram colorMoved = plain mnemonicPrefix = true renames = true [push] default = simple autoSetupRemote = true followTags = true [fetch] prune = true pruneTags = true all = true # Bunu kullanmamak için bir sebep var mı? [help] autocorrect = prompt [commit] verbose = true [rerere] enabled = true autoupdate = true [core] excludesfile = ~/.gitignore [rebase] autoSquash = true autoStash = true updateRefs = true # Kişisel tercihe bağlı ayarlar (gerekiyorsa yorumdan çıkarıp kullanın) [core] # fsmonitor = true # untrackedCache = true [merge] # (Git sürümü 2.3'ten eskiyse `diff3` kullanın) # conflictstyle = zdiff3 [pull] # rebase = true
Git çekirdek geliştiricileri Git’i nasıl yapılandırıyor?
- Git posta listesinde Felipe Contreras bir keresinde çekirdek ekibe, tüm ayarları ve takma adları kaldırıp Git’i varsayılan haliyle kullanmayı denemelerini önermişti
- Bu deneyin sonucunda 9 ayar ve 3 takma ad yeni varsayılanlar olarak önerildi
merge.conflictstyle = zdiff3 rebase.autosquash = true rebase.autostash = true commit.verbose = true diff.colorMoved = true diff.algorithm = histogram grep.patternType = perl feature.experimental = true branch.sort = committerdate - Bu ayarlar henüz varsayılan olarak benimsenmiş değil
- Ancak ilginç olan şu ki, birçok Git geliştiricisi bunlardan bazılarını açmadan Git kullanmakta zorlanıyor
- Daha da ilginç olan, çoğunuzun bunların ne anlama geldiğini muhtemelen hiç bilmiyor olması
- Bunu üç kategoriye ayırarak açıklayacağım
- Git’i açıkça daha iyi hale getirenler (Clearly Makes Git Better)
- Bunu kullanmamak için ne sebep var? (Why the Hell Not?)
- Zevk meselesi olanlar (A Matter of Taste)
# Git’i açıkça daha iyi hale getirenler
Branch listesini sıralama
- Varsayılan olarak Git branch’leri alfabetik sırada listeler, ancak son commit tarihine göre sıralamak daha kullanışlı olabilir
- Aşağıdaki ayarlarla branch’leri en son commit’e göre sıralayabilir ve sütunlu biçimde gösterebilirsiniz
git config --global column.ui auto git config --global branch.sort -committerdate
Tag listesini sıralama
- Tag’leri alfabetik değil, sürüm sırasına göre dizmek için şu ayarı kullanın
git config --global tag.sort version:refname
Varsayılan branch adını ayarlama
- Yeni bir depo başlatırken varsayılan branch adını belirlemek için şu şekilde ayarlayın
git config --global init.defaultBranch main
Gelişmiş diff ayarları
- Varsayılan diff algoritmasını
histogramyaparak daha isabetli karşılaştırmalar elde edin - Kod taşımalarını algılayıp renkle göstermek için şu ayarları ekleyin
git config --global diff.algorithm histogram git config --global diff.colorMoved plain git config --global diff.mnemonicPrefix true git config --global diff.renames true
Geliştirilmiş push ayarları
- Aşağıdaki ayarlarla push davranışını iyileştirebilirsiniz
git config --global push.default simple git config --global push.autoSetupRemote true git config --global push.followTags true
Geliştirilmiş fetch ayarları
- Fetch sırasında gereksiz branch ve tag’leri otomatik kaldırmak için şu ayarları kullanın
git config --global fetch.prune true git config --global fetch.pruneTags true git config --global fetch.all true
# Bunu kullanmamak için bir sebep var mı?
Otomatik düzeltme istemi
- Komut girerken yazım hatalarını algılayıp öneri sunmasını istiyorsanız şunu kullanın
git config --global help.autocorrect prompt
Commit atarken diff gösterimi
- Commit mesajı yazarken değişikliklerin de gösterilmesini istiyorsanız şu ayarı ekleyin
git config --global commit.verbose true
Çakışma çözümünü yeniden kullanma
- Daha önce yapılmış çakışma çözümlerini otomatik yeniden kullanmak için şu ayarları kullanın
git config --global rerere.enabled true git config --global rerere.autoupdate true
Genel .gitignore dosyası ayarlama
- Genel olarak yok sayılacak dosyaları belirtmek için şu şekilde ayarlayın
git config --global core.excludesfile ~/.gitignore
Rebase ayarlarını iyileştirme
- Rebase sırasında otomatik squash ve stash yapılmasını istiyorsanız şu ayarları kullanın
git config --global rebase.autoSquash true git config --global rebase.autoStash true git config --global rebase.updateRefs true
# Zevk meselesi
Gelişmiş merge çakışması gösterimi
- Merge çakışmalarında temel sürümün de gösterilmesini istiyorsanız şu ayarı değerlendirebilirsiniz
git config --global merge.conflictstyle zdiff3
pull sırasında rebase kullanma
git pullsırasında otomatik olarak rebase yapılmasını istiyorsanız şu şekilde ayarlayıngit config --global pull.rebase true
Dosya değişikliği algılama hızını artırma
git statusgibi komutların performansını artırmak için şu ayarları kullanabilirsinizgit config --global core.fsmonitor true git config --global core.untrackedCache true
# Sonuç
- Bu ayarlar sayesinde Git’i daha rahat kullanabilir, bazılarını çekirdek geliştiricilerin de aktif biçimde tercih ettiğini görebilirsiniz
- Git ayarlarınızı optimize ederek iş akışınızı geliştirebilir ve aracı daha verimli kullanabilirsiniz
7 yorum
"Daha da ilginç olan, çoğunuzun bunun ne anlama geldiğine dair hiçbir fikrinin olmaması" sözü tam yerini bulmuş. Aman aman.
"--global"değil de"-global"mı?Doğrusu
--global. Kopyala-yapıştır sırasında bir hata olmuş. Düzeltildi.Git çekirdek geliştiricileri Git'i nasıl yapılandırıyor ve kullanıyor?
Çakışma çözümünü yeniden kullanma özelliği güzelmiş.
Ben diff alırken
git-deltakullanıp TUI biçiminde görüntülüyorum.Ama bunların hiçbiriyle uğraşmak istemezsem
tig... hahaha Daha iyi bir şey var mı acaba...?Hacker News görüşleri
git out. Push edilmemiş tüm commit'leri listeliyor. Sürekli kullanıyorum~/.gitconfigdosyasını kurcalarken, git CLI için tamamlayıcı olarak delta'yı şiddetle tavsiye ederim~/.gitconfigdosyam şöyleunverifiedetiketinden kurtulabiliyorsunuzcolumn UIhariç). Muhtemelen Scott ve başkalarının iyi yazılarını okuduğum içindirbatolarak ayarladımgit config --global core.pager bat