Tujuan area pementasan adalah untuk memiliki ruang yang fleksibel untuk komit Anda. Saya pikir ini akan menjadi lebih jelas jika Anda membandingkan git dengan sistem kontrol versi yang tersentralisasi, seperti subversi.
Subversi
Dalam subversi Anda dapat memilih untuk melakukan file tertentu dari copy pekerjaan Anda. Tetapi hanya file lengkap. Sekarang: Bagaimana jika Anda ingin memformat file A
, bukan file B
, dan bagian-bagian file C
yang berhubungan dengan file A
namun bukan bagian-bagian yang bergantung pada perubahan dalam file B
(sejak saat itu Anda akan memiliki masalah dengan konsistensi komit).
Git
Git memecahkan ini dengan menyediakan pementasan sebagai copy pekerjaan kedua. Dalam area pementasan Anda sedang membuat snapshot yang akan Anda lakukan (secara kasar).
Oleh karena itu dalam area pementasan Anda dapat membuat snapshot yang mencakup perubahan A
dan versi file C
yang hanya mencerminkan perubahan dalam A
.
Untuk pertanyaan spesifik
Anda dapat menggelar panggung pada titik mana pun yang Anda inginkan. saya pribadi lebih suka naik panggung tepat sebelum meluncurkan komit.
Ketika memiliki perubahan dalam file yang dipentaskan dan kemudian mengubah file itu dalam copy pekerjaan, Anda belum mengubah file yang dipentaskan. Anda dapat memutuskan apakah akan menampilkannya juga atau tidak mengubah perubahan itu. Yaitu jika Anda menjalankan git gui citool
Anda akan melihat perbedaan versi bertahap dan tidak bertahap (alat yang bagus dan sederhana untuk pementasan dan pelaksanaan garis-bijaksana).
Git berhati-hati di sini, yang mungkin merupakan hal yang baik.
Strategi komit umum: Komitmen granular
Saya pikir ketika berbicara tentang pertanyaan "Kapan saya harus naik panggung", seseorang juga harus berbicara tentang kebiasaan berkomitmen.
VCS terpusat
Dalam sistem kontrol versi terpusat di mana Anda berkomitmen ke server pusat, penting bagi Anda rekan kerja bahwa komitmen Anda lengkap dan teruji dengan baik. Jadi orang akan mencoba untuk melakukan tidak terlalu sering dan kemudian melakukan keadaan file lengkap untuk meminimalkan kemungkinan kesalahan. Dengan demikian, komit cenderung merupakan potongan yang cukup besar yang mencakup banyak perubahan (jika itu bukan perbaikan sederhana). Perubahan dalam sebuah komit bisa sama sekali tidak terkait.
Git
Di Git, komit dilakukan secara lokal, hanya mendorongnya ke server yang membuatnya publik. Karena itu komit murah dalam arti tertentu. Komit dalam arti subversi agak sebanding dengan beberapa git commit
diikuti oleh git push
. Perbedaan ini penting.
Git memungkinkan Anda untuk melakukan satu baris kode, bahkan jika Anda telah mengubah baris lain dalam file yang sama. Ini memberi Anda banyak manfaat karena misalnya Anda dapat melakukan perbaikan bug keamanan di baris 100 sementara mengubah baris 300-350 memperkenalkan fitur baru.
- Anda dapat memisahkan perubahan berbeda di berbagai komitmen. Ini memisahkan mereka dengan baik dalam riwayat versi Anda dan bahkan memungkinkan Anda untuk mengembalikan satu tetapi tidak yang lain.
- Komit Anda tidak harus mencerminkan keadaan "kompilasi" dari copy pekerjaan Anda (meskipun saya mencoba mempertahankannya).
Jadi di mana "kontrol kualitas" dan jaminan build dalam komitmen yang diharapkan pengguna subversi? Itu bergeser ke tindakan lain di git. Anda masih ingin menyingkirkan status program yang berfungsi dalam repositori publik. Karena itu Anda memastikan bahwa tes berhasil dan program bekerja sebelum mendorong perubahan Anda.
Juga, cobalah untuk memanfaatkan cabang ke max. Ketika melakukan banyak perubahan kecil, Anda akan berakhir dengan riwayat versi yang cukup besar. Jika Anda bekerja di cabang, Anda bisa mengkategorikan komitmen granular tersebut dengan nama cabang dan kemudian menggabungkannya kembali (opsi --no-ff
juga akan mempertahankan bahwa fitur ini tinggal di cabang yang unik).
Yakni Anda bisa menjaga kebiasaan penggabungan ke master
cabang saja, jika cabang dalam keadaan baik . Anda juga dapat menggunakan tag untuk melacak tonggak dan rilis.
Sekarang untuk kembali ke pementasan: Setelah Anda komit beberapa baris per komit, Anda akan panggung langsung sebelum komit. (Setidaknya begitulah cara saya melakukannya).
git diff
dangit diff --cached
bagus, tetapi kadang-kadang saya ingin lebih).