1 poin oleh GN⁺ 3 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • jj adalah sistem kontrol versi yang kompatibel dengan Git dan menganjurkan branch anonim, tetapi untuk melakukan push ke repositori Git diperlukan bookmark, yaitu nama branch Git
  • jj git push --change xyz bawaan membuat branch push-xyz; ini berpusat pada change ID sehingga terasa alami di CLI, tetapi di daftar GitHub sulit membayangkan isi pekerjaannya
  • Dengan mengubah template git_push_bookmark, baris pertama deskripsi bisa diubah menjadi slug singkat memakai slugify(), lalu ditambahkan change ID pendek di belakangnya
  • jj git push --change ozkspkuyzpwu akan membuat add-note-about-jj-bookmark-templates/ozkspkuyzpwu, sehingga tetap mudah dibaca sekaligus mempertahankan keterkaitan revisi
  • Di repositori bersama, namespace seperti ddbeck/ bisa ditambahkan di depan, tetapi aturan nama branch Git cukup rumit sehingga jika tidak valid perlu membuat bookmark manual

Memperbaiki nama branch untuk Git push di jj

  • jj (Jujutsu) adalah sistem kontrol versi yang kompatibel dengan Git, dan karena beberapa alasan mengharapkan sekaligus menganjurkan penggunaan branch anonim
  • Saat melakukan push ke repositori Git, branch anonim pun memerlukan nama; di jj ini disebut bookmark, sedangkan di Git disebut branch
  • jj git push --change xyz akan melakukan push revisi dengan ID xyz ke branch Git push-xyz
  • Nilai bawaan ini terasa alami karena menekankan change ID yang sering ditampilkan dan digunakan oleh CLI jj, tetapi di daftar branch pada situs GitHub sulit mengingat pekerjaan apa yang dimaksud hanya dari push-xyz

Cara mengubah konfigurasi

  • Buat template alias slugify() baru, lalu ubah template git_push_bookmark agar menggunakannya
[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() menggunakan baris pertama dari deskripsi perubahan untuk membuat nama pendek berbentuk slug, lalu menambahkan change ID pendek di bagian akhir
  • Sebagai contoh, saat menjalankan jj git push --change ozkspkuyzpwu, akan dibuat add-note-about-jj-bookmark-templates/ozkspkuyzpwu
  • Nama ini lebih mudah dibaca sambil tetap mempertahankan hubungan dengan revision ID yang ditampilkan di CLI jj
  • Jika melakukan push ke repositori yang dibagikan dengan orang lain, template bisa diubah agar branch Anda ditempatkan di bawah namespace terpisah
[templates]
git_push_bookmark = '"ddbeck/" ++ slugify(description) ++ "/" ++ change_id.short()'
  • Tidak ada jaminan bahwa nama branch Git akan selalu aman
  • Aturan nama branch Git yang valid cukup rumit; jika template menghasilkan nama yang tidak valid, akan muncul error dan Anda harus membuat bookmark secara manual

1 komentar

 
GN⁺ 3 jam lalu
Komentar Lobste.rs
  • Saya cukup sering memakai pendekatan menaruh dan memanfaatkan metadata di pesan commit
    Pertama, buat alias trailer_v(key) untuk dengan mudah mengambil nilai trailer dari deskripsi commit, lalu di skrip push nushell susun label branch berbentuk ticket/topic dengan jj log
    Misalnya jika di pesan commit ada ticket:TKT-123 dan topic:stop-crashing, skrip yang melakukan push ke GitHub dan membuka halaman "Create PR" akan mengambil nilai itu dan memakainya
    Git trailers bagus karena menjadi penyimpanan key-value yang konsisten di dalam deskripsi, tetapi saat ini agak merepotkan untuk diambil dan dipakai dari bahasa revset

  • Membuat slug nama branch berdasarkan pesan commit atau isi perubahan terasa seperti area yang mudah ditangani oleh LLM lokal

    • Rasanya tidak ada alasan kuat untuk memakai LLM. Skrip sederhana yang disebut di artikel lebih ringan, kemungkinan lebih cepat, dan tampaknya akan bekerja hampir sama baiknya
  • Anggota tim saya sudah beberapa kali menanyakan nama branch yang dibuat otomatis oleh jj
    Saya berpikir untuk mencoba variasi cara ini untuk branch commit sekali pakai

  • Menurut saya, nama branch berbasis change-id itu sudah sempurna. Saya tidak merasa perlu mengubahnya
    Itu cuma nama branch yang diminta oleh alat code review yang mengerikan, bukan judul

    • Secara umum saya juga cukup puas dengan nama branch bawaan yang dibuat otomatis, tetapi saat mendorong sekumpulan perubahan untuk dijadikan PR, memang bisa membingungkan branch mana yang harus dituju masing-masing PR
      Mungkin ini juga bisa diselesaikan dengan alat yang mengotomatiskan pembuatan PR, tetapi saya suka pendekatan ini karena sederhana
    • Di $JOB, memakai nama branch yang deskriptif adalah kebiasaan