Pelaksanaan baharu berasaskan Go untuk fungsi interactive add Git telah menarik perhatian pembangun, bukan sahaja kerana ciri-ciri yang dipertingkatkan, tetapi juga kerana perbincangan komuniti yang dicetuskannya mengenai kemungkinan menggantikan pelaksanaan asal Perl Git secara upstream.
Port Go ini mencipta semula arahan git add -i
dan git add -p
yang biasa digunakan sambil menambah beberapa peningkatan yang berkuasa. Ini termasuk penapisan global merentas semua fail menggunakan corak regex, pemisahan hunk automatik, dan operasi pukal yang boleh menerima semua hunk yang sepadan sekaligus. Alat ini mengekalkan keserasian penuh dengan konfigurasi warna sedia ada Git dan menyokong semua mod patch utama.
Arahan Dipertingkat Berbanding Versi Asal Perl:
G <regex>
- Penapisan global merentas semua fail menggunakan corak regexG
- Kosongkan penapis dengan gesaan interaktif untuk corak baharuS
- Pemisahan automatik untuk membolehkan butiran maksimum secara globalA
- Terima semua hunk merentas semua fail selepas penapisan dan pemisahan
Minat Komuniti dalam Integrasi Upstream
Apa yang menarik ialah tumpuan segera komuniti untuk memasukkan pelaksanaan ini ke dalam pangkalan kod utama Git . Seorang pembangun secara langsung bertanya mengapa pengarang tidak menyerahkannya kepada senarai mel Git untuk pertimbangan upstream. Soalan ini menyerlahkan keinginan umum dalam komuniti pembangun untuk melihat alat moden yang dipertingkatkan menggantikan pelaksanaan lama dalam perisian teras.
Walau bagaimanapun, realiti integrasi upstream terbukti lebih kompleks. Pendekatan konservatif projek Git terhadap kebergantungan baharu bermakna menambah Go sebagai keperluan akan menghadapi tentangan yang ketara. Seperti yang dinyatakan oleh seorang pengulas, ia memerlukan usaha besar untuk menyelaraskan penyelenggara dalam memperkenalkan bahasa baharu, serupa dengan cabaran yang dihadapi ketika menambah Rust ke kernel Linux .
Cadangan untuk menulis semula dalam C menunjukkan respons biasa kepada situasi sedemikian, walaupun ini membawa beban yang besar melebihi terjemahan bahasa mudah. Pelaksanaan itu perlu disepadukan dengan sistem penjanaan patch sedia ada Git dan mengekalkan keserasian merentas semua platform yang disokong.
Keupayaan Aliran Kerja yang Dipertingkatkan
Ciri-ciri menonjol pelaksanaan Go menangani titik kesakitan aliran kerja yang sebenar. Sistem penapisan global membolehkan pembangun mencari jenis perubahan tertentu dengan cepat merentas keseluruhan set perubahan mereka. Sebagai contoh, menapis untuk komen TODO atau pernyataan console.log boleh membantu pembangun mengatur perubahan berkaitan bersama-sama, tanpa mengira fail mana yang mengandunginya.
Ciri auto-splitting membawa keupayaan pemisahan hunk sedia ada Git kepada kesimpulan logiknya, secara automatik memecahkan perubahan kepada granulariti yang paling halus. Digabungkan dengan ciri penerimaan pukal, ini mencipta gabungan aliran kerja yang berkuasa yang tidak mungkin dengan pelaksanaan asal Perl .
Mod Tampung yang Disokong:
- Mod peringkat:
git add -p
ataugit add --patch
- Mod tetapan semula:
git reset -p
- Mod daftar keluar:
git checkout -p
- Operasi simpan dan pokok kerja
- Semua mod menyokong ciri penapisan dan pemisahan yang dipertingkatkan
Alat Alternatif dan Ekosistem
Perbincangan itu juga mendedahkan ekosistem pelbagai alat peningkatan Git yang dipercayai oleh pembangun. Beberapa ahli komuniti menyebut alternatif pilihan mereka, termasuk tig
yang telah lama wujud untuk operasi Git berasaskan terminal dan scmpuff
untuk aliran kerja staging yang dipertingkatkan. Ini menunjukkan bahawa walaupun alat Git standard berfungsi, jelas terdapat selera untuk pengalaman pengguna yang lebih baik.
Respons jenaka pengarang mengenai meninjau semula integrasi upstream pada tahun 2045 mencerminkan garis masa realistik untuk perubahan besar kepada fungsi teras Git , sambil masih menyatakan minat tulen untuk akhirnya menggantikan versi upstream.
Kaedah Pemasangan:
- Binaan terus:
go build
- Pasang sebagai arahan Git:
go build -o "$(go env GOPATH)/bin/git-add-interactive"
- Tambah ke laluan exec Git:
export GIT_EXEC_PATH="$(go env GOPATH)/bin:$GIT_EXEC_PATH"
- Pengesahan:
which git-add-interactive
dan uji dengangit add -i
Memandang ke Hadapan
Projek ini mewakili lebih daripada sekadar alat Git yang lain - ia menunjukkan bagaimana pelaksanaan moden boleh meningkatkan aliran kerja yang biasa sambil mengekalkan keserasian. Minat segera komuniti dalam integrasi upstream menunjukkan terdapat permintaan sebenar untuk peningkatan ini mencapai semua pengguna Git , bukan sahaja mereka yang sanggup memasang alat tambahan.
Sama ada melalui penggunaan upstream akhirnya atau pembangunan berterusan sebagai alat berdiri sendiri, pelaksanaan Go ini menyerlahkan evolusi berterusan alat pembangun dan keinginan komuniti untuk aliran kerja yang dipertingkatkan dan cekap.