git status merangkak di SSHFS lewat VPN: pindahkan pekerjaan
File besar tersalin cepat dan git status merangkak. Jika pohon ada di SSHFS lewat VPN, biayanya adalah pulang-pergi per file, bukan lebar pita. Pindahkan pekerjaan.
Salin file 200 MB dan ia terbang. Jalankan git status di direktori yang sama dan tunggunya cukup lama untuk berpindah pikiran. Kedua pengamatan itu tidak bertentangan, karena transfer massal mengukur throughput sedangkan Git mengukur berapa banyak pertanyaan kecil ke sistem file yang bisa diajukan per detik, dan pohon jarak jauh yang di-mount mengubah setiap pertanyaan menjadi pulang-pergi. Menyetel VPN tidak akan memperbaiki beban kerja yang bentuknya salah.
Mengapa status adalah tolok ukur yang salah
Git harus tahu tentang banyak file: mana yang diubah, mana yang belum dilacak, dan apakah data indeks yang di-cache masih cocok dengan yang ada di disk. Lewat SSHFS setiap pengamatan itu bisa menjadi operasi jaringan. Satuan kerjanya di sini adalah jumlah file, bukan megabita.
Itu sebabnya status pertama setelah klon lambat, dan sebabnya yang berikutnya bisa lebih lambat lagi di pohon yang penuh keluaran build. Pemindaian file tak terlacak menyusuri direktori yang mungkin tidak Anda pedulikan, dan setiap langkah adalah permintaan lain lewat tautan. Pada jalur 40 ms pohon dengan beberapa ribu entri menjadi beberapa ribu pulang-pergi. Tidak perlu menangkap paket untuk membuktikan aritmetika itu.
Tolok ukur unduhan memberi tahu tautan baik-baik saja; itu tidak mengatakan apa pun tentang apakah seribu pembacaan kecil akan selesai sore ini.
Pindahkan pohon kerja, bukan tombol penyetel
Klon lokal menaruh pohon kerja, indeks, dan operasi Git di mesin yang sama. Pull menjadi langkah jaringan yang terlihat alih-alih setiap pemeriksaan file menjadi begitu.
Ini cocok setiap kali pengembang dapat menyimpan sumber yang diperlukan secara lokal, yang sebagian besar waktunya begitu. Ini juga mempertajam batas antara commit dan penerapan, karena menyunting file lokal tidak lagi mengubah layanan jarak jauh yang berjalan secara tak sengaja; perubahan harus didorong dan diterapkan seperti hal lain. Harga yang dibayar adalah kode ada di dua tempat, jadi putuskan salinan mana yang berwenang dan bagaimana perbaikan cepat di server kembali ke repositori. Percakapan itu lebih murah daripada perintah status yang tidak ingin dijalankan siapa pun.
Jika ruang kerja harus tetap jarak jauh, jalankan Git di sana
Kadang ruang kerja tidak bisa dipindahkan: build membutuhkan lingkungan itu, datanya terlalu besar, atau kebijakan menahan sumber di host. Maka jalankan Git dan alat pengembangan terkait di samping file, melalui shell jarak jauh yang disetujui atau lingkungan pengembangan jarak jauh. Editor bisa tetap di laptop sementara backend-nya bekerja di samping pohon kerja.
Operasi mahal kemudian terjadi secara lokal di host jarak jauh, dan jaringan membawa lalu lintas editor alih-alih ribuan panggilan stat. Ini perbaikan yang sama seperti klon lokal, diutarakan sebagai pilihan penerapan dan bukan migrasi.
Sinkronisasi adalah alur kerja dengan pemilik, bukan cache
Ruang kerja yang disinkronkan dapat memangkas pembacaan jarak jauh yang berulang, tetapi itu bukan cache transparan. Ia membutuhkan pemilik untuk setiap perubahan, aturan untuk konflik, dan kesepakatan tentang file yang dihasilkan yang kedua pihak anggap miliknya. Tanpa aturan itu pengaturannya menciptakan ketidaksepakatan alih-alih kemudahan.
Penyinkron dua arah tanpa aturan itu menghasilkan masalah berbeda dari yang ia selesaikan, biasanya penggabungan yang tak bisa diatribusikan siapa pun. Hindari menjalankan dua proses Git pada satu pohon kerja bersama kecuali Anda paham bagaimana keduanya berkoordinasi.
Lalu setel, dan jaga SSH tetap waras
Setelah pengaturannya benar, dua setelan mengubah berapa banyak file yang harus ditanyakan Git: status.showUntrackedFiles dan cache file tak terlacak di balik core.untrackedCache. Keduanya tidak mengubah biaya setiap pertanyaan di jalur 40 ms; keduanya hanya mengubah berapa banyak pertanyaan. Putar tombol hanya setelah pulang-pergi menjadi lokal.
Ukur waktu perintah yang menjengkelkan Anda alih-alih bernalar dari tolok ukur yang menyalin satu file besar, dan biarkan enkripsi SSH yang didukung apa adanya. Cipher usang tidak memperpendek pulang-pergi; ia menambahkan masalah kedua yang bertahan lebih lama dari yang pertama. Referensi git status layak dibaca sekali, karena perintah itu melakukan jauh lebih banyak kerja daripada namanya.