Dağıtılmış kaynak kod kontrol sistemi Git'in 2.55 sürümü duyuruldu. Başlıca değişiklikler arasında şunlar yer alıyor: Rust derlemelerinin varsayılan olarak dahil edilmesi, uygulama geliştirmesi. Linux `fsmonitor` işlemi, artımlı MIDX dizinini yeniden paketlemek için yeni bir strateji, bir commit'i düzeltmek için `git history fixup` komutu, nesne kullanılabilirlik bitmap'i oluşturmanın optimizasyonu, paralel hook yürütme desteği ve `git format-rev` komutu. Git, GPLv2+ lisansı altında lisanslanmıştır.
Önceki sürüme kıyasla, yeni sürüm 100 geliştiricinin yardımıyla hazırlanan 505 değişiklik içeriyor; bu geliştiricilerden 33'ü Git geliştirme konusunda yeniydi. Başlıca yeni özellikler (1, 2, 3):
- Rust dil bileşeni desteği varsayılan olarak etkinleştirilmiştir. rustc derleyicisi
Rust, derleme bağımlılıklarına eklendi. Rust olmadan derlemek için, `make` yardımcı programını çalıştırırken "NO_RUST=1" bayrağını veya `meson configure` çalıştırırken "-Drust=disabled" seçeneğini kullanabilirsiniz. Rust ile derlemeyi devre dışı bırakma özelliği, Rust'ı gerekli bir bağımlılık olarak içerecek olan Git 3.0'a kadar desteklenecektir. Rust, SHA-1 ve SHA-256 karma yapılandırmaları arasında taşınabilirlik için bir katman ve değişken uzunluktaki tamsayıların kodlanması ve kod çözülmesi gibi bazı dahili işlevleri uygular. Gelecekte daha önemli Git iç işlevlerinin Rust ile yeniden yazılması bekleniyor. - Değişiklik geçmişini yeniden yazma olanağı sağlayan deneysel "git history" komutu, bir commit'i düzeltmek için "git history fixup" işlemiyle güncellendi. "Fixup" işlemi, "git add" ile eklenen değişiklikleri daha önceki bir commit'e taşımanıza ve "git commit --fixup="" komutunu çalıştırmaya benzer şekilde, sonraki tüm commit'leri otomatik olarak yeniden yazmanıza olanak tanır. ve "git rebase --autosquash" komutunu çalıştırıyorum. ~».
- Platform için Linux fsmonitor arka plan işlemi uygulanmıştır; bu işlem, inotify mekanizmasını kullanarak dosya sistemindeki değişiklikleri izler ve "git status" gibi komutları çalıştırırken tüm çalışma dizinini taramaktan kaçınmanızı sağlar. Bu işlem, "core.fsmonitor" ayarı aracılığıyla etkinleştirilebilir.
- "git repack" komutu "--write-midx=incremental" seçeneğiyle güncellendi. Bu seçenek, artımlı MIDX dizinindeki (çoklu paket dizini) meta verileri güncellemek için yeni bir strateji uygulayarak tüm dizini yeniden paketleme ihtiyacını ortadan kaldırır. Artımlı çoklu paket dizini, nesnelerin paket dosyalarındaki dağılımı hakkında bilgi içeren tek bir büyük dizin yerine katmanlar kullanır. Her katman belirli sayıda paket dosyasını kapsar ve ayrı bir bitmap dosyasında saklanır. Bu yapı, yeni paket dosyalarındaki nesneler hakkındaki verilerin dizine eklenmesine ve mevcut katmanları yeniden oluşturmadan dizine yeni katmanlar eklenmesine olanak tanır.
"git repack --write-midx=incremental" komutu, yeni oluşturulan paket dosyalarını kapsayan artımlı MIDX dizinine yeni bir katman ekler. "--geometric" depo paketleme moduyla birlikte kullanıldığında, bu yeni komut, birden fazla paket dosyasındaki yeni nesneleri tek bir daha büyük paket dosyasında birleştirmeyi ve gerekirse artımlı MIDX dizininin birden fazla bitişik katmanını paketleyip birleştirmeyi sağlar. Bu strateji, "git repack" komutunun yalnızca üst katmanları yeniden yazmasına ve daha eski, daha büyük katmanları olduğu gibi bırakmasına olanak tanır. Ayrıca, toplam katman sayısını toplam nesne sayısının logaritmasıyla orantılı tutarak katman zincirinin kontrolsüz büyümesini önler.
- Nesne kullanılabilirlik bitmaplerinin oluşturulması, gereksiz özyinelemeyi ortadan kaldıran yeni bir nesne ağacı geçiş algoritması, nesne konumlarının önbelleğe alınması, bitmaplerin XOR işlemiyle birleştirilmeden önce sıralanması ve sözde birleştirme bitmaplerinin oluşturulmasına yönelik kodun yeniden düzenlenmesi yoluyla önemli ölçüde optimize edilmiştir. Test deposunda, bu optimizasyonlar bitmap oluşturma süresini 612 saniyeden 294 saniyeye düşürmüştür.
- Artık yapılandırma dosyalarında bağımsız hook'ların paralel yürütülmesi mümkün. Taahhüt notlarını değiştiren veya indeksleri ve çalışma ağacını inceleyenler gibi paylaşılan durumu etkileyen veya dikkate alan hook'lar paralel olarak çalıştırılamaz. Ancak, linter denetimi ve birim testi için hook'lar paralel olarak çalıştırılabilir. Paralel yürütmeye izin veren hook'lar, "hook.hook_name.parallel = true" parametresi kullanılarak yapılandırılır. Aynı anda çalıştırılabilecek iş sayısı, hook.jobs ayarı ile belirlenir. .jobs veya "-j" komut satırı seçeneği.
- "git pack-objects --path-walk" komutu artık "blob:none", "blob:limit=" gibi filtreler belirtmenize olanak tanıyor. ", "ağaç:0", "nesne:tür=" », «seyrek: " ve "combine:". Testte, "--path-walk" çalıştırılırken ikili dosyaların atılması, oluşturulan paket dosyasının boyutunu %16 oranında azalttı.
- Commit listelerinde belirtilen veya rastgele metinlerde bulunan revizyonları ve nesne adlarını biçimlendirmek için "git format-rev" komutu eklendi (örneğin, bu komut commit notlarını işlemek için kullanılan hook'larda kullanılabilir).
git last-modified | git format-rev --stdin-mode=text --format=%an
Junio C Hamano yerleşik/taahhüt.c
- İletilen bilgi mesajlarında ve hata metinlerinde terminal kontrol dizilerinin çoğunun atlanması varsayılan olarak etkinleştirilmiştir. sunucuKötü amaçlı yazılımlara erişim sağlandığında sunucu Bu tür kaçış dizileri, örneğin imleç hareketi ve metin temizleme için kaçış dizileri aracılığıyla çıktıyı gizlemek veya değiştirmek için kullanılabilir. Öğeleri vurgulamak için kaçış dizilerine destek korunmuştur.
- `git checkout -m` komutu artık çakışan yerel değişiklikleri, çakışmayı hemen çözmenize gerek kalmadan otomatik olarak stash alanına kaydediyor.
- "Git push" komutu artık tek bir komutla bir dalı birden fazla harici Git sunucusuna göndermenize olanak tanıyor. Örneğin, ana dalı yalnızca ana sunucuya değil, aynı zamanda aynalara da göndermek için, "publish" komutuyla bir grup oluşturabilirsiniz. sunucular "github", "gitlab" ve "mirror":
git config remotes.publish "github gitlab mirror"
git push publish main - "git log --graph" komutuna artık "--graph-lane-limit=" seçeneği eklendi. » Dalları görselleştirirken dikey çubuk sayısını sınırlamak, çok sayıda dala sahip depolarda commit verileri için ekranda yer bırakmanıza olanak tanır.
...
* | | | | 619931f561 'dl/posix-unused-warning-clang' dalını birleştir
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: GIT_GNUC_PREREQ() karşılaştırmasını basitleştirme
| * | | | ~ ffd45926dc compat/posix.h: GIT_GNUC_PREREQ() ve UNUSED'ı temizle
|\ \ \ \ \~
| * | | | ~3f5203eeb4 ls-dosyaları: lstat'tan önce pathspec'i filtrele - "git log" ve "git rev-list" komutlarına artık "--max-count-oldest=" seçeneği eklendi. Bu özellik, belirli bir aralıktaki en eski N adet commit'i seçmenize olanak tanır.
Kaynak: opennet.ru
