Git’in son sürümünde yer alan 2.54, açık kaynak topluluğunun katkılarıyla geliştirildi. 137’den fazla katkıcının, bunların 66’sının ilk kez katkıda bulunduğu bu sürüm, hem yeni özellikler hem de hataların giderilmesini içeriyor. Önceki incelememizin ardından gelen bu iki versiyonun (2.53 ve 2.54) öne çıkan yeniliklerine yakından bakalım.
Geçmişi Kolayca Yeniden Yazın: Yeni 'git history' Komutu
Git projesi, depoların geçmişini yeniden yazmak için uzun süredir çeşitli araçlar sunuyordu. En bilineni olan git rebase -i, sıralama, birleştirme, düzenleme ve silme gibi birçok işlemi destekliyordu. Ancak bu esneklik, karmaşık bir süreç gerektiriyor ve çalışma dizininde ya da dizinde çatışmalar oluşabiliyordu. Basit düzenlemeler içinse bu kadar karmaşık bir araca ihtiyaç duymak gereksizdi.
Git 2.54, tam da bu basit ihtiyaçlar için tasarlanmış deneysel bir komut sunuyor: git history. Bu komut, halihazırda iki temel işlemi destekliyor: reword ve split.
- git history reword <commit>, belirtilen commit’in mesajını düzenlemenizi sağlıyor. Ortaya çıkan değişiklikler, o commit’in altında yer alan tüm dalları otomatik olarak güncelliyor.
git rebase’den farklı olarak, çalışma dizini ya da dizini etkilemiyor ve hatta boş bir depoda bile çalışabiliyor. - git history split <commit>, bir commit’i iki parçaya ayırmanızı kolaylaştırıyor. Kullanıcı arayüzü,
git add -pkomutunun etkileşimli moduna benzer şekilde çalışıyor. Commit’in içindeki değişiklikleri inceleyerek, hangilerinin yeni bir commit’e aktarılacağına karar verilebiliyor. Örneğin, bir dosyadaki belirli satırların yeni bir commit’e eklenmesi mümkün.
Bu komutun tasarımında bazı sınırlamalar bulunuyor. Birleştirme (merge) içeren geçmişler desteklenmiyor ve çatışma oluşabilecek durumlarda işlem reddediliyor. git history, genel olarak karmaşık olmayan ve hedef odaklı düzenlemeler için geliştirildi. Komutun altyapısı, git replay’ın çekirdek mekanizmalarına dayanıyor ve bu sayede çalışma dizinine müdahale etmeden çalışabiliyor. Bu özellik, otomatikleştirilmiş senaryolarda da büyük avantaj sağlıyor.
Komut henüz deneysel aşamada olduğundan, arayüzünde değişiklikler olabilir. Git 2.54’ü yükleyerek git history reword ve git history split komutlarını deneyebilirsiniz.
Tüm Depolarda Ortak Kancalar (Hooks) Kullanın
Git kancaları (hooks), komit öncesi ya da itme (push) sonrası gibi belirli olaylarda otomatik olarak çalışan komut dosyalarıdır. Geleneksel olarak, bu kancalar sadece .git/hooks dizininde yer alan yürütülebilir betiklerle tanımlanıyordu. Bu da aynı kancanın farklı depolarda kullanılmasını zorlaştırıyordu. Kullanıcıların, tüm depolarında aynı kancaları çalıştırması gerektiğinde, ya üçüncü parti araçlara başvurmaları ya da her depoya aynı betiği kopyalamaları gerekiyordu.
Git 2.54, kancaları konfigürasyon dosyaları üzerinden tanımlamanıza olanak tanıyor. Artık kancalarınızı .git/hooks dizinine yerleştirmek yerine, konfigürasyon dosyalarında tanımlayabilirsiniz. Örneğin, C++ 20 projelerinde bir linter çalıştırmak istiyorsanız aşağıdaki gibi bir yapılandırma yapabilirsiniz:
[hook "linter"]
event = pre-commit
command = ~/bin/linter --cpp20Bu konfigürasyon, kullanıcı düzeyinde (~/.gitconfig), sistem genelinde (/etc/gitconfig) ya da yerel depoda yer alabilir. Böylece aynı kancaları tüm depolarınızda kolayca uygulayabilirsiniz. Dahası, aynı olay için birden fazla kanca çalıştırabilirsiniz. Örneğin, hem bir linter hem de bir güvenlik tarayıcısı çalıştırmak için her birini ayrı ayrı tanımlayabilirsiniz:
[hook "linter"]
event = pre-commit
command = ~/bin/linter --cpp20
[hook "no-leaks"]
event = pre-commit
command = ~/bin/leak-detectorKancaları listelemek ve nereden geldiklerini görmek için git hook list komutunu kullanabilirsiniz. Ayrıca, hook.<name>.enabled = false ayarıyla bireysel kancaları devre dışı bırakmak da mümkün. Bu özellik, sistem genelinde tanımlanmış kancaların belirli bir depoda devre dışı bırakılması gerektiğinde oldukça kullanışlıdır.
Git’in dahili kanca yönetimi de modernize edildi. Önceden özel kod yollarından çağrılan birçok yerleşik kanca (örneğin pre-push, post-rewrite ve receive-pack kancaları), artık yeni kanca API’sine geçirildi. Bu sayede tüm kancalar, yeni konfigürasyona dayalı yapılandırmadan faydalanabiliyor.
Bakım İşlemlerinde Geometrik Paketleme Desteği
Git 2.54’ün getirdiği bir diğer önemli yenilik, varsayılan olarak aktif olan geometrik paketleme (geometric repacking) özelliği. Bu özellik, depoların verimli bir şekilde paketlenmesini ve bakım işlemlerinin hızlandırılmasını sağlıyor.
Geometrik paketleme, paketlerin boyutunu ve sayısını optimize ederek, depoların performansını artırıyor. Bu sayede, özellikle büyük ve karmaşık depolarda yapılan git gc (garbage collection) işlemleri daha hızlı ve etkili hale geliyor. Varsayılan olarak etkin olan bu özellik, kullanıcıların manuel olarak ayarlamasına gerek kalmadan performans avantajı sağlıyor.
Git’in bu yenilikleri, geliştiricilerin hem bireysel hem de takım çalışmalarında daha verimli olmalarını hedefliyor. Yeni komutlar ve konfigürasyon seçenekleri, özellikle otomatikleştirilmiş senaryolarda büyük kolaylıklar sunuyor. Git 2.54’ü indirerek bu yeniliklerin tadını çıkarabilir ve depolarınızı daha etkili bir şekilde yönetebilirsiniz.
Yapay zeka özeti
Git 2.54 introduces experimental 'git history' commands for simple commit edits and configuration-based hooks for centralized automation across repositories.