- jj, Git uyumlu bir sürüm kontrol sistemi ve anonim branch’leri öneriyor; ancak bir Git deposuna push etmek için bookmark, yani bir Git branch adı gerekiyor
- Varsayılan
jj git push --change xyz, push-xyz branch’ini oluşturuyor; bu change ID odaklı yaklaşım CLI’da doğal olsa da GitHub listesindeyken yapılan işi hatırlatmakta yetersiz kalabiliyor
git_push_bookmark şablonunu değiştirip açıklamanın ilk satırını slugify() ile kısa bir slug’a dönüştürmek ve sonuna kısa change ID eklemek mümkün
jj git push --change ozkspkuyzpwu, add-note-about-jj-bookmark-templates/ozkspkuyzpwu adını üretip okunabilirliği ve revizyon bağlantısını birlikte koruyor
- Paylaşılan depolarda başa
ddbeck/ gibi bir namespace eklenebilir; ancak Git branch adı kuralları karmaşık olduğundan geçersizse manuel bookmark oluşturmak gerekiyor
jj için Git push branch adlarını iyileştirme
jj(Jujutsu), Git uyumlu bir sürüm kontrol sistemi ve çeşitli nedenlerle anonim branch kullanımını bekliyor ve öneriyor
- Bir Git deposuna push ederken anonim branch’lerin de bir ada ihtiyacı var;
jj buna bookmark, Git ise branch diyor
jj git push --change xyz, kimliği xyz olan revizyonu Git branch’i push-xyz olarak push eder
- Varsayılan davranış,
jj CLI’ın sıkça gösterip kullandığı change ID’yi öne çıkardığı için doğal; ancak GitHub web sitesindeki branch listesinde push-xyz tek başına hangi işin yapıldığını hatırlatmakta zorlanıyor
Yapılandırmayı değiştirme yöntemi
- template alias
slugify() yeniden tanımlanıp git_push_bookmark şablonunun bunu kullanması sağlanıyor
[template-aliases]
"slugify(str)" = '''
truncate_end(
65,
str.first_line()
.replace(regex:'[^[[:alnum:]].]', '-')
.replace(regex:'-{2,}', '-')
.replace(regex:'\.{2,}', '.')
.replace(regex:'(^-+|-+$)', '')
.lower()
)
'''
[templates]
git_push_bookmark = 'slugify(description) ++ "/" ++ change_id.short()'
slugify(), değişiklik açıklamasının ilk satırını kullanarak kısa bir slug biçiminde ad üretir ve sonuna kısa change ID’yi ekler
- Örneğin
jj git push --change ozkspkuyzpwu çalıştırıldığında add-note-about-jj-bookmark-templates/ozkspkuyzpwu oluşturulur
- Bu ad, daha okunabilir olurken
jj CLI’da gösterilen revizyon ID’si ile bağlantıyı da korur
- Başkalarıyla paylaşılan bir depoya push ediyorsanız, branch’lerinizi ayrı bir namespace altında tutacak şekilde şablonu değiştirebilirsiniz
[templates]
git_push_bookmark = '"ddbeck/" ++ slugify(description) ++ "/" ++ change_id.short()'
- Git branch adlarının her zaman güvenli olacağı garanti edilmez
- Git’in geçerli branch adı kuralları karmaşıktır; şablon geçersiz bir ad üretirse hata oluşur ve bookmark’ı manuel olarak oluşturmanız gerekir
1 yorum
Lobste.rs görüşleri
Commit mesajına metadata ekleyip kullanma yaklaşımını oldukça verimli buluyorum
Önce commit açıklamasından trailer değerini kolayca çekmek için
trailer_v(key)adında bir takma ad oluşturup, ardındannushellpush script’indejj logileticket/topicbiçiminde branch etiketi oluşturuyorÖrneğin commit mesajına
ticket:TKT-123,topic:stop-crashingeklerseniz, GitHub’a push edip"Create PR"sayfasını açan script bu değerleri alıp kullanıyorGit trailers, açıklama içinde tutarlı şekilde kullanılabilen iyi bir anahtar-değer deposu, ancak şu anda
revsetdilinden alıp kullanmak biraz zahmetliCommit mesajına veya değişiklik içeriğine dayanarak branch adını slug’laştırmak, yerel bir LLM’in kolayca halledebileceği bir alan gibi geliyor
Ekip arkadaşlarım birkaç kez
jj’nin otomatik oluşturduğu branch adıyla ilgili soru sormuştuTek seferlik commit branch’leri için bunun bir varyasyonunu kullanmayı düşünüyorum
change-id tabanlı branch adı bence mükemmel. Özellikle değiştirmek istemem
Bu, korkunç bir code review aracının istediği branch adından ibaret; bir başlık değil
Bunu PR oluşturmayı otomatikleştiren bir araçla da çözebilirsiniz, ama bu yaklaşımın sadeliği hoşuma gidiyor