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