- Tujuannya adalah membuat alat kolaborasi git yang paling sederhana
- Menjalankan server git self-hosted semudah menjalankan server SSH, tanpa mengorbankan waktu dan energi kolaborator eksternal
- Menggabungkan mailing list dan alur kerja pull request
- Ingin membuat alat kolaborasi yang sesederhana membuat patch, tetapi memiliki kemudahan penggunaan pull request
- Bukan membuat repositori kode lain, melainkan ingin membuat solusi git self-hosted yang sangat sederhana untuk berkolaborasi dengan kontributor eksternal
Yang dibutuhkan
- Yang dibutuhkan pemilik kode untuk menjalankan server git:
- Yang dibutuhkan kontributor eksternal:
- Pasangan kunci SSH
- Klien SSH
Masalah saat ini
- Email sangat bagus sebagai sistem terdistribusi untuk mengirim dan menerima perubahan pada repositori git (set patch), tetapi proses onboarding pengguna baru ke mailing list, menyiapkan klien email dengan benar, lalu sekadar mengirim kontribusi kode saja sudah cukup membuat banyak developer menyerah
- Karena kolaborasi memanfaatkan protokol email, ada batasan pada set fitur. Misalnya, email tidak bisa diedit, setiap orang memakai klien yang berbeda, dan klien-klien ini memiliki keterbatasan yang berbeda terkait email plain text dan pengunduhan patch
- Pull request Github mudah digunakan, diedit, dan dikelola, tetapi kelemahannya adalah pengguna harus berada di dalam situs web Github untuk melakukan code review
- Ini bagus untuk perubahan cepat, tetapi begitu mulai membaca kode di browser web, ada kelemahan yang cukup besar. Pada titik tertentu, lebih masuk akal untuk meninjau kode di lingkungan pengembangan lokal atau IDE
- Ada alat dan plugin untuk meninjau PR di dalam IDE, tetapi butuh usaha besar untuk membuatnya dapat digunakan
- Selain itu, solusi self-hosted yang meniru pull request membutuhkan banyak infrastruktur untuk mengelolanya. Database, situs web yang terhubung ke git, pengelolaan admin, layanan, dan sebagainya
- Titik gesekan besar lainnya adalah pengguna eksternal harus membuat akun dan login terlebih dahulu sebelum dapat mengirim perubahan kode. Ini menambah gesekan yang signifikan, bukan hanya bagi kontributor eksternal tetapi juga bagi pemilik kode yang harus menyediakan infrastrukturnya
- Sering kali repositori harus di-fork di dalam host repositori sebelum bisa mengirim PR. Lalu setelah itu tidak pernah berkontribusi lagi dan repositori hasil fork tetap tersimpan selamanya. Ini terasa konyol
Memperkenalkan Patch Request (PR)
- Ingin membuat "server" git self-hosted yang memungkinkan kirim-terima patch tanpa kerepotan pengaturan email maupun batasan yang dipaksakan oleh protokol email
- Juga ingin agar alur kerja utama berpusat pada lingkungan pengembangan lokal. Github mendukung alur kerja dengan membawa IDE ke browser, tetapi kami ingin membalik gagasan itu dengan menjadikan code review di lingkungan pengembangan lokal sebagai warga kelas satu
- Ini dipandang sebagai titik tengah antara alur kerja pull request Github dan pengiriman/penerimaan patch melalui email
- Ide dasarnya adalah menggunakan aplikasi SSH untuk menangani sebagian besar interaksi antara kontributor dan pemilik proyek. Semua hal dapat dilakukan sepenuhnya di terminal dengan ergonomis dan fitur lengkap
- Notifikasi dilakukan lewat RSS, dan setiap perubahan status menghasilkan aset web statis sehingga semuanya bisa di-host hanya dengan file web server sederhana
Alur kerja format-patch
- Di sini, alat kolaborasi dasarnya adalah format-patch
- Baik mengirim perubahan kode maupun meninjau perubahan kode, semuanya terjadi di dalam kode
- Baik kontributor maupun pemilik membuat commit baru dan menghasilkan patch di atas patch satu sama lain
- Dengan begitu, tidak perlu ada penampil web tempat reviewer memberi "komentar" pada satu baris blok kode. Tidak perlu. Cukup terapkan patch dari kontributor, tulis komentar atau perubahan kode, buat patch baru, lalu kirim patch itu ke server git sebagai "review"
- Alur ini juga bekerja dengan cara yang persis sama saat dua pengguna berkolaborasi atas serangkaian perubahan
- Ini juga menyelesaikan masalah pengiriman beberapa set patch untuk perubahan kode yang sama. Ada satu Patch Request pusat tempat semua perubahan dan kolaborasi berlangsung
- Mungkin bisa dicari cara memanfaatkan git note untuk review/komentar, tetapi jujur saja, solusi itu terasa brutal dan di luar tingkat kenyamanan kebanyakan pengguna git
- Cukup kirim review sebagai kode dan tulis anotasi pada kode menggunakan bahasa pemrograman yang sedang dipakai
- Menangani anotasi tersebut dan menghapusnya pada patch lanjutan adalah tugas kontributor
- Fitur pemaksaan untuk menangani semua anotasi: jika masih ada anotasi yang belum ditangani di dalam kode, patch tidak akan di-merge. Tidak bisa diabaikan, karena kalau tidak akan salah ter-upstream
Cara kerja Patch Request
- Patch Request (PR) adalah cara paling sederhana untuk mengirim, meninjau, dan menerima perubahan pada repositori git. Cara kerjanya seperti ini:
- Kontributor eksternal meng-clone repositori (git-clone)
- Kontributor eksternal membuat perubahan kode (git-add & git-commit)
- Kontributor eksternal membuat patch (git-format-patch)
- Kontributor eksternal mengirim PR ke server SSH
- Pemilik menerima notifikasi RSS untuk PR baru
- Pemilik menerapkan patch secara lokal dari server SSH (git-am)
- Pemilik menulis saran di dalam kode (git-add & git-commit)
- Pemilik menyalurkan patch ke server SSH untuk mengirim review (git-format-patch)
- Kontributor eksternal menerima notifikasi RSS untuk review PR
- Kontributor eksternal menerapkan ulang patch (git-am)
- Kontributor eksternal meninjau dan menghapus anotasi di kode
- Kontributor eksternal mengirim patch lain (git-format-patch)
- Pemilik menerapkan patch secara lokal (git-am)
- Pemilik menandai PR sebagai disetujui dan mendorong kode ke main (git-push)
1 komentar
Sepertinya ini adalah tambahan baru pada Pico.sh - kumpulan open source untuk mengelola layanan web melalui SSH.
Sebelumnya sudah mencakup hal-hal berikut.