GitButler CLI: Scott Chacon, GitButler

GGitButler
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00Selamat datang, saya akan melakukan demo singkat jika kalian belum tahu Git Butler. Git Butler adalah alat kontrol versi baru
00:00:07yang telah kami kerjakan selama beberapa tahun. Kami banyak meniru hal-hal bagus dari JJ.
00:00:10Jadi, jika kalian menggunakan Jujutsu, kami mengambil banyak sekali konsep dari kalian.
00:00:16Ngomong-ngomong, jika kalian belum pernah memakai Git Butler, ini adalah alat kontrol versi.
00:00:19Umumnya berbasis GUI,
00:00:21tapi kami sedang mengerjakan CLI dan saya ingin memamerkan beberapa fitur CLI karena kalian semua bekerja dengan Git dan
00:00:26Git memiliki CLI yang menarik, dan
00:00:29kami punya beberapa konsep yang juga kami ambil dari Jujutsu.
00:00:33Tapi ada beberapa hal baru yang menurut saya cukup keren.
00:00:36Jadi saya ingin menunjukkannya agar bisa mendapat ide tentang apa yang sekiranya akan sangat hebat.
00:00:40Jadi, ya, saya akan membahas hal-hal ini.
00:00:43Jadi,
00:00:46ada beberapa hal berbeda. Nama alat baris perintahnya adalah “but”.
00:00:49Karena saya sering melontarkan candaan bapak-bapak, rasanya nama ini cukup tepat.
00:00:52Kalian bisa menjalankan “but status”. Ini semacam log singkat.
00:00:57Jadi, jika kalian pernah menggunakan Sapling atau Jujutsu dan melihat log-nya,
00:01:00kami akan menampilkan file yang dimodifikasi di dalam disk
00:01:05dari direktori kerja kalian dari semacam target branch.
00:01:08Tapi kami juga akan menampilkan semacam commit yang kalian miliki, kan?
00:01:11Kalian juga bisa mengetik “but status -F” dan itu akan menunjukkan file yang dimodifikasi di setiap commit.
00:01:18Jika kalian menjalankan GUI Git Butler, kalian bisa melihat lane dan hal semacam itu.
00:01:23Tapi ada banyak hal keren di Git Butler yang tidak bisa dilakukan Git, misalnya log singkat yang bagus ini.
00:01:29seperti ini,
00:01:30dan kalian tahu,
00:01:32kita bisa membuat log secara umum yang menyatakan apakah commit ini lokal atau tidak, jadi ini mirip dengan log singkat
00:01:39di alat lainnya, dan kita bisa membuat branch baru.
00:01:40Jadi jika saya melihat statusnya, saya bisa melihat bahwa—saya sedang membuat klon Twitter di sini.
00:01:44Jadi saya punya beberapa branch, yang satu bertumpuk (stacked) di atas yang lain.
00:01:50Ini adalah hal yang bisa dilakukan Git jika kalian mengaktifkan “update ref”.
00:01:52Itu akan menulis ulang referensi kalian saat melakukan rebasing atau semacamnya.
00:01:56Tapi kami melakukannya dengan lebih alami, kan?
00:02:00Jadi kami otomatis memperbarui referensi kalian dan kalian bisa mengubah apa pun dan rebase akan melacaknya.
00:02:03Tapi kita juga bisa melakukan
00:02:09branch paralel, jadi kita bisa mengaktifkan lebih dari satu branch sekaligus. Dan yang akan saya lakukan di sini... Oh,
00:02:11adalah membuat branch baru dan
00:02:23menjalankannya lagi, dan saya punya branch baru ini yang sejajar dengan branch lain yang sedang saya kerjakan, kan?
00:02:26Dan yang bisa saya lakukan adalah masuk ke branch itu dan mulai menetapkan sesuatu, melakukan commit sesuatu.
00:02:33Kita akan melihat itu selanjutnya.
00:02:39Hal keren lainnya yang bisa kita lakukan adalah kita punya beberapa area pementasan (staging area).
00:02:41Jadi setiap tumpukan (stack) yang kalian punya memiliki area staging-nya sendiri, jadi kalian bisa mengetik
00:02:45“rub”. “rub” adalah perintahnya. Kalian bisa mengetik “rub KU” untuk file ini, misalnya, dan masukkan ke “ZA”.
00:02:51Itu akan menetapkannya ke area staging tertentu. Jika saya ingin menetapkan sesuatu ke sini,
00:02:58dia memberikan kode-kode singkat ini, kan? Dan kalian bisa bilang, oke,
00:03:04yang ini ditetapkan di sini dan yang itu ditetapkan di sana.
00:03:12Dan jika saya men-commit-nya, saya bisa memasukkannya ke salah satu branch ini secara bersamaan.
00:03:15Mari kita lihat ini. Kita bisa melihat ini sudah di-commit di sini atau ditetapkan di sini, jadi saya bisa bilang
00:03:21“but commit -o”
00:03:27dan itu akan men-commit-nya di sini, kan.
00:03:30Sekarang file ini ada di dalam commit ini dan bagusnya lagi, ini semua adalah Git, jadi saya juga bisa
00:03:40bilang
00:03:48seperti ini, ini sebenarnya membuat commit Git. Saya bisa melakukan push branch tersebut dan sebagainya.
00:03:50Tapi
00:03:57ya, saya bisa menetapkannya ke dua branch atau cukup ketik “but commit” dan itu akan melakukan semua yang belum ditetapkan ke target
00:03:59yang dimaksud, jadi saya bisa memilih branch mana yang ingin saya pakai untuk commit hal baru.
00:04:07Dan kami menciptakan istilah yang disebut “rubbing” (menggosok).
00:04:11Saya sudah bercerita ke banyak orang tentang Caleb yang minum-minum semalaman dan tidak ada di sini sekarang.
00:04:14Jika dia datang, kita semua harus berdiri dan memberinya tepuk tangan meriah.
00:04:18Tapi dialah yang mencetuskan istilah “rubbing” ini, yang intinya mengambil dua hal dan menyatukannya.
00:04:21Jika kalian pernah bermain Minecraft atau semacamnya dan tahu meja kerajinan (crafting table),
00:04:28kalian paham konsep ini, di mana
00:04:32kalian mengambil ini dan itu, menyatukannya, dan terciptalah sesuatu yang baru dan lebih menarik, kan?
00:04:34Ada banyak hal yang bisa dilakukan dengan CLI “but” untuk menyatukan sesuatu dengan “but rub”.
00:04:38Saya akan tunjukkan beberapa hal. Kita bisa menetapkan sesuatu seperti yang saya tunjukkan tadi, kita bisa memasukkan file yang belum di-commit
00:04:45di mana saya bisa mengetik “but rub”
00:04:52file yang dimodifikasi ke dalam branch, tapi kalian juga bisa membatalkan penetapan. Ada mode khusus di sini, yaitu nol nol
00:05:01seluruh commit ini, misalnya,
00:05:05ke “00” dan
00:05:07itu akan membatalkan commit-nya. Jadi intinya melakukan semacam “reset soft”
00:05:11dari commit tersebut. Saya juga bisa mengubah (amend) sesuatu dengan mengetik “rub le r”
00:05:17y
00:05:24RV... wah, saya butuh kacamata baca sekarang. Saya sudah cukup tua juga.
00:05:27SW, yang merupakan... maaf, sebenarnya ke
00:05:3211 W. Mari kita lakukan yang itu.
00:05:35Apakah itu IW? Terima kasih.
00:05:38Ups.
00:05:41Apakah itu huruf I?
00:05:44Maaf.
00:05:48Dan
00:06:02itu memasukkannya ke sana. Saya bisa melakukan
00:06:04rub I.
00:06:10Bisa membatalkan commit sesuatu?
00:06:14Kan, saya bisa melakukan squash. Jadi jika saya ingin menggabungkan commit ini dan itu, saya bisa ketik “but rub”
00:06:16J e GE
00:06:22Dan itu akan menggabungkan commit-commit tersebut. Saya bisa membatalkan commit, memindahkan sesuatu,
00:06:25seperti apa pun yang kalian pikirkan saat menggabungkan dua hal, kan?
00:06:32Dia akan melakukan itu, dan jika menggabungkan sesuatu ke perubahan yang belum ditetapkan, itu intinya akan membatalkannya, kan?
00:06:37Kalian bahkan bisa—saya lupa apakah ini benar-benar berfungsi atau tidak.
00:06:42Kalian juga bisa memindahkan file, kan? Jadi
00:06:48J 8 2
00:06:53dan
00:07:02dia akan mengambil file dari commit tersebut dan kemudian
00:07:03membatalkannya dari commit itu lalu memindahkannya ke commit di bawahnya, kan?
00:07:07Yang menarik bukanlah hal ini tidak bisa dilakukan di Git, tapi ini relatif sulit dilakukan di Git, kan? Seperti membatalkan
00:07:11commit tertentu di suatu tempat atau memindahkan file antar-commit atau memasukkan file ke dalam commit yang berjarak tiga tingkat di bawahnya.
00:07:19Kalian bisa melakukannya di Git, seperti melakukan
00:07:27commit perbaikan sementara (fixup commit) dan auto squash atau semacamnya.
00:07:31Tapi rasanya sangat menyenangkan bisa sekadar “menggosok” (rub) berbagai hal dan memindahkan konten ke tempat yang diinginkan
00:07:34dan memiliki beberapa branch secara simultan.
00:07:40Hal lain yang bisa dilakukan adalah memecah commit dengan relatif mudah. Kami juga punya perintah “but new”.
00:07:43Jadi jika saya ingin mengetik
00:07:51“but new”
00:07:54H e, maka dia akan
00:07:56membuat commit kosong baru di sana yang tidak berisi apa-apa.
00:07:59Benar. Ini gaya Jujutsu di mana kalian bisa membuat commit baru yang kosong,
00:08:03dan kemudian saya bisa memasukkan (rub) file ke dalamnya jika mau. Saya bisa bilang
00:08:08“ambil file ini”
00:08:12nol
00:08:15saya ambil
00:08:23Itu memindahkan file ini ke yang baru, dan saya bisa mengetik “describe”.
00:08:29Apa tadi? X U C.
00:08:32Bagaimana saya bisa...
00:08:45Status -F, status file. Jadi itu menunjukkan file di setiap commit daripada... Jadi “but ST”.
00:08:56“but status” hanya menunjukkan commit-commit-nya, dan
00:09:02“but status -F” menunjukkan file di dalamnya, jadi kalian bisa memindahkannya dengan fitur “rubbing”.
00:09:04Ya, jadi ada “new” dan “describe
00:09:11Jika ada yang memakai Jujutsu, kalian bisa menandai sebuah commit sebagai target.
00:09:16Jadi semua yang terlihat akan dimasukkan ke commit itu, dan kalian bisa menandainya.
00:09:21Ini sebenarnya hal yang menarik, kan? Jadi saya bisa ketik
00:09:25“but new -M” atau saya bisa menandainya dengan “but mark”
00:09:29Z a dan
00:09:33itu akan menandai ini, dan kalian bisa lihat dia sudah mengambil hal yang belum di-commit dan memasukkannya ke dalam
00:09:35jalur (lane) itu, dan
00:09:42lalu saya bisa men-commit sesuatu atau saya juga bisa menandai
00:09:44commit yang spesifik.
00:09:47Oh, itu adalah branch, maaf.
00:09:56maka dia akan mengambilnya dan otomatis memasukkannya ke commit tersebut, kan.
00:09:58Jadi ini menandai commit tertentu dan kemudian jika saya melakukan echo baru
00:10:07Ini menarik karena ini adalah stacked branch yang punya beberapa commit, dan apa pun yang saya lakukan sekarang
00:10:15otomatis mengubah commit tiga tingkat di bawahnya dalam stack tersebut, kan?
00:10:21Ini mirip cara kerja JJ saat kalian mengetik “jj new” dan mulai bekerja,
00:10:26dia otomatis mengubah commit terakhir yang kalian buat,
00:10:31kecuali kalian bisa menandai commit mana pun dan
00:10:33terus bekerja, dan dia akan mencoba terus mengerjakan commit tersebut, lalu kalian bisa menghapus tandanya kapan pun mau.
00:10:36Benar.
00:10:41Pokoknya, ya, ini beberapa hal menyenangkan yang sedang kami kerjakan.
00:10:44Saya merasa sangat senang bisa mengerjakan ini.
00:10:48Hal lain yang kami lakukan, yang juga meniru JJ, adalah “oplog” (log operasi).
00:10:52Ini adalah sesuatu yang sudah lama kami miliki.
00:10:56Jika kalian menggunakan versi GUI Git Butler, ada tab yang menunjukkan semua operasi yang kami lakukan.
00:10:59Tapi setiap kali saya menjalankan sesuatu, dia membuat semacam
00:11:03riwayat operasi, dan saya bisa melihat semua yang sudah dilakukan Git Butler dan saya bisa kembali ke salah satunya atau mengetik
00:11:06seperti
00:11:12“undo”.
00:11:13Ups, jika ejaannya benar saya bisa mengetik “undo” dan itu membatalkan operasi serta mengembalikan direktori kerja dan status saya ke
00:11:14kondisi sebelumnya, atau saya bisa mengetik
00:11:20“restore”
00:11:22ke salah satu SHA ini.
00:11:24Upsie.
00:11:26Dan
00:11:29itu mengatur ulang direktori kerja, branch, dan semua yang saya miliki kembali ke keadaan semula.
00:11:33Ini sebenarnya menarik untuk melakukan demo seperti ini karena saya bisa membuat skenario
00:11:38yang saya tahu berhasil, lalu bisa mengembalikannya dan memulai ulang skenarionya dari awal.
00:11:44Tapi tentu saja sangat bagus untuk bisa bilang, “Eh, sebenarnya saya tidak ingin melakukan itu” atau jika terjadi
00:11:50konflik. Cukup batalkan saja dan biarkan saya lanjut bekerja.
00:11:54Jadi ya, itu saja. Oh, satu hal lagi, semua perintah memiliki output JSON, jadi kalian bisa mengetik “but -J”
00:11:58atau “--json” dan jalankan perintah apa pun, dia akan memberikan data yang sama tapi dalam format JSON.
00:12:06Jadi jika ingin membuat skrip, ini jauh lebih baik daripada memakai output porcelain milik Git atau semacamnya.
00:12:11Kalian bisa langsung memasukkannya atau memprosesnya lewat jq untuk menemukan entri tertentu dan
00:12:15bisa membuat skrip CLI dengan sedikit lebih rapi.
00:12:21Itu saja. Terima kasih banyak.
00:12:24Jadi itu saja. Terima kasih banyak

Key Takeaway

GitButler CLI menghadirkan pengalaman kontrol versi yang lebih intuitif dan fleksibel melalui perintah "but", yang menyederhanakan manipulasi commit dan pengelolaan branch paralel dibandingkan Git tradisional.

Highlights

GitButler memperkenalkan CLI baru bernama "but" yang mengambil inspirasi dari konsep Jujutsu (JJ) dan Sapling.

Fitur utama "but status

Timeline

Pengenalan GitButler CLI dan Konsep Dasar

Scott Chacon memperkenalkan GitButler sebagai alat kontrol versi baru yang awalnya berbasis GUI namun kini merambah ke CLI. Nama alat baris perintah ini secara jenaka disebut sebagai "but" agar sesuai dengan humor khas bapak-bapak. Scott mengakui bahwa banyak konsep dalam alat ini yang meniru hal-hal bagus dari Jujutsu atau JJ. Salah satu fitur awalnya adalah tampilan log singkat yang lebih kaya informasi dibandingkan Git standar. Hal ini membantu pengembang melihat file yang dimodifikasi langsung dari direktori kerja terhadap target branch.

Manajemen Branch Paralel dan Status File

Bagian ini menjelaskan kemampuan GitButler dalam menangani beberapa branch secara bersamaan atau simultan. Scott mendemonstrasikan bagaimana pengguna dapat membuat branch baru yang berjalan sejajar dengan pekerjaan yang sedang berlangsung tanpa harus berpindah konteks secara ekstrem. GitButler secara alami memperbarui referensi saat melakukan rebasing sehingga pelacakan perubahan menjadi lebih mulus. Fitur "but status -F" juga dipamerkan untuk menunjukkan detail file di setiap commit. Kemampuan ini memberikan fleksibilitas tinggi bagi pengembang yang sering bekerja pada fitur bertumpuk atau stacked branches.

Konsep Rubbing dan Manipulasi Commit

Scott memperkenalkan istilah unik bernama "rubbing" yang diinspirasi dari konsep meja kerajinan di permainan Minecraft. Perintah "but rub" digunakan untuk mengambil dua elemen dan menyatukannya menjadi sesuatu yang baru. Pengguna dapat menetapkan file yang belum di-commit ke branch tertentu menggunakan kode singkat yang dihasilkan sistem. Selain itu, proses commit dapat dilakukan secara spesifik ke salah satu branch atau ke target yang dimaksud secara otomatis. Ini menunjukkan betapa GitButler berusaha menyederhanakan alur kerja pementasan (staging) yang biasanya kaku di Git.

Teknik Lanjutan: Squash, Undo, dan Move File

Demonstrasi berlanjut pada teknik manipulasi commit yang lebih kompleks seperti melakukan squash atau penggabungan dua commit dengan perintah sederhana. Scott menunjukkan cara memindahkan file antar-commit atau membatalkan commit (reset soft) menggunakan fitur rubbing. Meskipun hal ini bisa dilakukan di Git melalui fixup atau auto squash, GitButler membuatnya jauh lebih mudah dan cepat. Scott juga mengakui kesulitan penglihatan karena faktor usia saat mencoba membaca kode singkat di layar namun tetap berhasil menjalankan demo. Bagian ini menekankan pada efisiensi pemindahan konten ke tempat yang diinginkan tanpa prosedur Git yang rumit.

Fitur New, Describe, dan Penandaan Commit

Video ini membahas perintah "but new" yang memungkinkan pembuatan commit kosong, sebuah fitur yang populer di kalangan pengguna Jujutsu. Scott juga menjelaskan fitur "but mark" untuk menandai sebuah commit sebagai target aktif bagi perubahan yang sedang dikerjakan. Dengan menandai commit tertentu, semua perubahan baru akan otomatis masuk ke commit tersebut meskipun berada beberapa tingkat di bawah tumpukan (stack). Hal ini memungkinkan pengembang untuk terus bekerja pada konteks lama tanpa harus melakukan commit manual berulang kali. Pengguna dapat dengan mudah menghapus tanda tersebut kapan pun mereka ingin berpindah fokus.

Log Operasi, Undo Global, dan Output JSON

Sebagai penutup, Scott memamerkan fitur "oplog" yang mencatat setiap operasi yang dilakukan oleh GitButler. Fitur ini memungkinkan pengguna untuk melakukan "undo" secara instan atau mengembalikan (restore) seluruh status direktori kerja ke SHA tertentu jika terjadi kesalahan atau konflik. Demo ini membuktikan betapa amannya bereksperimen dengan GitButler karena semua langkah dapat diputar balik dengan mudah. Terakhir, disebutkan bahwa semua perintah memiliki opsi output JSON melalui argumen "-J" untuk integrasi skrip yang lebih bersih. Scott menutup presentasi dengan menekankan bahwa alat ini dirancang untuk membuat pengelolaan kode menjadi lebih menyenangkan dan rapi.

Community Posts

View all posts