Tip dan Trik Git
(blog.gitbutler.com)- Bahkan pengguna yang sudah lama memakai Git pun mudah melewatkan fitur yang kurang dikenal, sehingga anggapan bahwa pengetahuan command line tingkat lanjut sudah umum menjadi goyah
- Berbeda dengan generasi yang bermigrasi dari SVN atau CVS, pengembang yang hanya pernah memakai Git punya lebih sedikit kesempatan untuk mempelajari cara penggunaan tingkat lanjut
- Seiring waktu, Git terus menambahkan fitur-fitur kecil namun berguna, dan perubahan seperti ini bisa punya nilai praktis dalam situasi tertentu
- Untuk pengguna menengah hingga mahir, topik tentang fitur lama namun berguna, fitur yang baru ditambahkan, serta repositori besar dan monorepo dibagi menjadi seri singkat 3 bagian
- Jika meninjau kembali fitur-fitur yang tidak terlihat dari kebiasaan penggunaan Git yang sudah akrab, pekerjaan harian di repositori bisa ditangani dengan lebih efisien
Alasan melihat kembali Git
- Saat baru-baru ini membawakan presentasi tentang Git dan GitButler, terkonfirmasi bahwa banyak pengembang masih punya bagian yang belum mereka ketahui tentang Git
- Dulu saya sering membawakan presentasi Git tingkat lanjut, tetapi sekitar 10 tahun terakhir saya menganggap orang-orang sudah mengetahui fitur command line tingkat lanjut
- Generasi pengembang yang hanya pernah memakai Git tidak perlu berpindah dari alat seperti SVN atau CVS ke Git, atau mempelajari ulang konsep-konsep sebelumnya
- Git juga mempelajari fitur-fitur baru seiring waktu, dan meskipun kebanyakan perubahan itu halus atau ditujukan untuk penggunaan tertentu, semuanya tetap bisa membantu pekerjaan nyata
- Seri blog ini disusun berdasarkan presentasi FOSDEM 2024 little known Git stuff
Seri tip Git dalam 3 bagian
- Ditujukan untuk pengguna Git tingkat menengah hingga mahir, membahas fitur-fitur yang mungkin terlewat bahkan oleh mereka yang sudah lama memakai Git
- Alih-alih dimuat semuanya dalam satu tulisan, isinya dibagi menjadi tiga tulisan singkat berdasarkan beberapa topik
- Topik yang dibahas:
- Oldies but Goodies: fitur Git lama tetapi tetap berguna
- Some Subtle New Things: perubahan halus yang baru ditambahkan ke Git
- Really Large Repositories and Monorepos: pembahasan tentang repositori yang sangat besar dan monorepo
- Tulisan pertama berlanjut ke Oldies but Goodies
1 komentar
Komentar Hacker News
Ia juga melakukan percakapan menarik dengan orang-orang Mercurial, dan mereka mengatakan belakangan ini mendapatkan peningkatan kecepatan yang mengejutkan dengan menulis sebagian internal Hg dalam Rust
Ia juga sedang mempertimbangkan Pro Git edisi ke-3, jadi ia meminta orang-orang memberi tahu hal-hal yang mereka pelajari dengan susah payah saat mempelajari Git, atau hal-hal yang ingin mereka ketahui
difftasticbagus dipakai sebagai pengganti diff Git: https://difftastic.wilfred.me.uk/Alias
gitconfigyang sering dipakai adalahfza,gone, danroot.git fzamenampilkan file yang dimodifikasi/baru di jendelafzflalu meneruskan file yang dipilih kegit add: https://github.com/junegunn/fzfgit gonemenghapus branch lokal yang tidak ada di remote, dangit rootmencetak root repositori sehingga enak untuk kembali ke root dari direktori yang dalam. Belakangan ini jadi lebih jarang dipakai karena menggunakanzoxide: https://github.com/ajeetdsouza/zoxidegit blametidak rusakhttps://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revltrevgt
Misalnya, saat rebase, ia tidak paham mengapa semua commit berikutnya berubah padahal hanya satu commit yang dihapus. Pada akhirnya, rebase baru bisa dipahami setelah menyadari bahwa penyimpanannya berbasis snapshot, tetapi operasinya berbasis perbedaan; menekankan bagian ini lebih kuat saat mengajar juga akan membantu
Saya menghormati orang-orang yang menyukai Git, tetapi bagi saya itu hanyalah alat yang harus dipakai
checkout/commit/pushdasar, mengetahui beberapa hal—terutama penulisan ulang histori—bisa sangat meningkatkan kualitas riwayat commit dan memudahkan engineer lain di proyek memahami alurnyaGit tampaknya akan tetap menjadi semacam konstanta jangka panjang di industri, dan karena ini salah satu alat yang paling sering disentuh dalam pengembangan sehari-hari, layak untuk sedikit dipelajari
Karena itu saya pikir tidak masalah jika kompleksitas Git ada sampai tingkat tertentu
core.fsmonitor. Dari sudut pandang monorepo besar, saya berharapgit clonepunya opsi resumePada tahun 2000-an saya mengalami masalah yang sama ketika mencoba meng-clone repositori kernel dengan koneksi ber-bandwidth rendah; setelah meminta bantuan di mailing list, barulah saya bisa mendapatkannya karena seseorang mengunggah seluruh repositori sebagai tar terkompresi di situs pribadinya
Bahkan sekarang, jika VPN perusahaan terputus sebentar, masalah yang sama kadang terjadi saat meng-clone repositori besar. Bayangkan sudah mengunduh 95% dari repositori Windows sebesar 300GB lalu Wi-Fi terputus sebentar
Aneh rasanya dua alat besar yang banyak memakai bandwidth dalam stack pengembangan modern, Git dan Docker, tidak mendukung resume unduhan dengan baik
https://git-scm.com/docs/git-bundle
Ini mirip dengan mengatakan menginginkan bahasa tingkat rendah yang menyembunyikan kompleksitas sistem; keduanya pada dasarnya saling eksklusif. Git memuaskan dan tidak terlalu sulit dipelajari, jadi sebagian orang memang perlu belajar Git saja
Ia menyingkirkan kotak hitam yang dirasakan banyak developer di terminal, menempatkan graf di depan, dan menampilkan operasi rebase secara visual dengan alami sehingga Git menjadi menyenangkan
Kemahiran CLI tetap bernilai, tetapi menyebalkan melihat developer dengan pengalaman 10 tahun tersandung saat menyelesaikan masalah dasar, atau merusak histori proyek karena suasana bahwa “engineer sejati harus memakai Git CLI saja”
Sekarang, meskipun memakai CLI, saya menyarankan agar sepanjang hari tetap melihat graf di jendela lain. Itu bisa dilakukan gratis di VS Code, JetBrains, bahkan CLI
Ketika anggota tim menggabungkan PR, saya langsung melihatnya dan me-rebase branch saya, sehingga branch selalu mutakhir berbasis
maindan tidak meninggalkan neraka merge atau commit “fix conflicts” yang mengerikanSaat mencari 10 file teratas yang paling banyak diubah sejak dibuat kemarin, saya menemukan https://github.com/tj/git-extras/blob/main/Commands.md
Ada banyak perintah tambahan Git yang berguna
git-extrasitu bagus. Alat lain yang juga oke adalah git absorb: https://github.com/tummychow/git-absorbKlien UI modern seperti GitKraken cukup layak dipakai dan membantu, jadi saya kurang paham kenapa kebanyakan developer bersikeras tetap memakai Git CLI: https://www.gitkraken.com/
Saya tidak sepenuhnya menentang GUI, tetapi saat ini CLI lebih efisien, dan saya tidak ingin menghabiskan waktu mencari GUI yang memenuhi syarat berikut
Tampilannya bagus, berupa aplikasi native dan bukan sekadar browser web lawas yang disisipkan, tanpa telemetri atau dimatikan secara default, sepenuhnya open source, dan bisa diharapkan masih ada 5 tahun lagi
Selain itu, jangan sampai malah membuat lebih membingungkan. Di perusahaan lama saya pernah harus memakai Visual Studio, dan ada tombol yang sebenarnya berarti “tandai sebagai konflik sudah diselesaikan”, tetapi secara menyeramkan tertulis “Accept merge”
Jangan membingungkan orang yang sudah mengharapkan kata tertentu punya arti tertentu, dan perilaku seperti tombol “Commit changes” yang katanya ramah tetapi sekalian melakukan push ke remote juga sulit dipercaya
Kalau harus berpindah ke program lain hanya untuk membuat satu commit, motivasi untuk sering commit jadi berkurang
push,pull,checkout, jadi memakai GUI terasa berlebihanSaat memakai Git di CLI pun, sebagian besar bukan hal istimewa, hanya beberapa perintah; tips atau trik yang jarang dipakai saya catat di file teks
Saya sudah tahu
-committerdate, tetapi tidak tahu itu bisa diatur sebagai pengurutan default, dan ini sangat berguna. Ada beberapa catatangit columnscukup membingungkan kalau tidak muat di layar dan harus menggulir, jadi akan bagus kalau ada angkagit maintenanceterlihat bagus, tetapi saya khawatir karena banyak melakukan rebase. Saya penasaran apakah objek loose akan hilang lebih cepat dibandinggc. Terlihatgcdimatikan, tetapi tidak jelasTerkait
git blame, ada skrip yang kurang dikenal tetapi berguna: https://github.com/gnddev/git-blameall. Saking kurang terkenalnya, saya harus mem-porting sendiri ke Python 3, padahal saya bukan developer Pythongcdinonaktifkan. Saat menjalankanmaintenance runsecara eksplisit, itu diaktifkan sebagai taskObjek loose tidak dikumpulkan lebih cepat dibanding
gc. Pada akhirnya itu hanya karena menjalankan gcgit-blameallterlihat oke, jadi sepertinya perlu saya cobaSaya menyederhanakan alur Git secara signifikan dengan beberapa alias yang bekerja di berbagai environment
git syncedmenyinkronkan branch saat ini dengan rebase ke upstream jika ada, atau ke origin jika tidak ada. Menggunakanmasterataumain, dengan prioritas kemaingit pubmemublikasikan perubahan ke remote origin, dan memakai force push dengan leasegit prmembuka URL PR yang sesuai di GitHub tanpa perlu klien GH. Jika upstream didefinisikan, PR dikirim ke sanagit hubmembuka halaman GitHub repositorihttps://softwaredoug.com/blog/2022/11/09/idiot-proof-git-aliases.html
Saya berhenti berpura-pura tahu apa yang saya lakukan dan memakai alat Git visual. Misalnya SmartGit atau alat yang ada di IntelliJ. Menurut saya, “pahlawan command line” Git lebih mendekati pamer
Lapisan perintah untuk pengguna bisa menjengkelkan karena membingungkan. Misalnya
YoursdanTheirsbisa berarti kebalikan total tergantung konteksTidak ada gaya atau tema yang konsisten di seluruh antarmuka pengguna, jadi diperlukan lapisan visual baru agar tidak membuat orang gila
Saya hanya tahu aplikasi dan Git secara umum sebatas yang diperlukan untuk pekerjaan, dan kalau suatu saat butuh lebih, tinggal cari. Selama bertahun-tahun memakainya, kasus seperti itu hanya sekali dua kali
Untuk pekerjaan kompleks memperbaiki kesalahan orang lain atau kesalahan saya sendiri, pertama-tama saya juga memakai alat visual untuk melihat history, commit, reflog, dan diff, lalu memahami apa yang kacau dan apakah ada yang bisa diselamatkan
Kalau hanya ada satu commit untuk kembali, saya melakukan
reset --hard; kalau perlu menggabungkan sesuatu dari beberapa commit, biasanya saya memakai command lineKeduanya tidak saling eksklusif. Untuk hal seperti diff atau konflik, saya hanya memakai alat visual, tetapi saya mendapat banyak manfaat dari mempelajari objek commit, reflog, apa yang dilakukan rebase di balik layar, rebase interaktif, hard/soft reset, dan sebagainya.