Git Staging: Kapan menuju panggung? Apa yang harus dilakukan jika modifikasi terjadi sesudahnya


9

Saya agak baru di dunia luas Git. Saya telah membaca manual dan telah berlatih tetapi saya bingung tentang beberapa aspek dari itu, yang saya tidak tahu setelah mencari.

Aku bertanya-tanya:

  • Dalam sebuah proyek (posting komit pertama), kapan saat yang tepat untuk mem-stage file sumber? Tepat sebelum melakukan? Tepat setelah menambahkan / menghapus atau memodifikasi?

  • Jika file dipentaskan di tengah-tengah antara dua commit, dan kemudian mereka dimodifikasi, apa yang terjadi dengan Git? Apakah perlu memperhatikan perubahan konten saat dinyatakan dan menjadi apa sejak saat itu?

  • Jika saya membuat file baru, buat stage dan kemudian ingin menghapusnya, mengapa Git meminta saya untuk menggunakan flag "-f" dan "git -rm file.ext" sederhana tidak akan berfungsi?

Saya telah membaca "Apa artinya panggung" dan berbagai mata pelajaran lain dari manual dan tutorial lain tentang Git tetapi seperti yang saya katakan, saya masih tidak mengerti hal-hal di atas.

Jadi, jika Anda bisa, tolong jawab pertanyaan dengan kata-kata dan contoh Anda sendiri sehingga saya mungkin memiliki kesempatan yang lebih baik untuk memahaminya.

Terima kasih.


1
Saya membuat file setiap kali saya menyelesaikan beberapa pekerjaan kecil (terlalu kecil untuk komit) atau sebelum beberapa perubahan saya tidak yakin. Lakukan apa pun yang bekerja untuk Anda. Temukan alat (misalnya, git gui atau git cola) yang menunjukkan kepada Anda tahapan dan perubahan yang belum dipentaskan ( git diffdan git diff --cachedbagus, tetapi kadang-kadang saya ingin lebih).
maaartinus

Jawaban:


4

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 Cyang berhubungan dengan file Anamun 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 Adan versi file Cyang 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 citoolAnda 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 commitdiikuti 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-ffjuga akan mempertahankan bahwa fitur ini tinggal di cabang yang unik).

Yakni Anda bisa menjaga kebiasaan penggabungan ke mastercabang 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 add -psangat bagus.
Vorac

2

Saya pikir Anda menganggapnya terlalu serius. Pementasan hanya memilih hal-hal yang ingin Anda sertakan dalam komit berikutnya. Sangat jarang penting kapan atau bagaimana Anda melakukan pementasan; dan jika Anda memiliki banyak perubahan bertahap dan tidak bertahap pada suatu waktu tertentu, Anda mungkin perlu merevisi proses pengembangan Anda.

Dalam sebuah proyek (posting komit pertama), kapan saat yang tepat untuk mem-stage file sumber? Tepat sebelum melakukan? Tepat setelah menambahkan / menghapus atau memodifikasi?

Saya biasanya melakukannya dengan benar sebelum melakukan (kecuali saya melihat kesalahan ketik, jadi saya harus membuat koreksi saat-terakhir dan juga panggung) Prosesnya adalah sebagai berikut: edit, jalankan tes, tahap, komit. Jika Anda melakukan tahapan sebelum pengujian, kemungkinan tes akan gagal dan Anda harus membuat perubahan dan melakukan tahapan juga, jadi mengapa tidak membiarkannya sampai waktu komit?

Jika file dipentaskan di tengah-tengah antara dua commit, dan kemudian mereka dimodifikasi, apa yang terjadi dengan Git? Apakah perlu memperhatikan perubahan konten saat dinyatakan dan menjadi apa sejak saat itu?

Ini akan menunjukkan kepada Anda perbedaan antara kondisi repo saat ini dan (komit terakhir + perubahan bertahap). Saat Anda melakukan beberapa perubahan baru, itu hanya akan menghitung ulang keadaan (komit terakhir + perubahan bertahap).

Jika saya membuat file baru, buat stage dan kemudian ingin menghapusnya, mengapa Git meminta saya untuk menggunakan flag "-f" dan "git -rm file.ext" sederhana tidak akan berfungsi?

Sekarang saya menebak di sini, tapi itu mungkin karena info yang dipentaskan mungkin penting (jika tidak Anda tidak akan menampilkannya), tetapi belum di bawah kontrol versi (seperti file yang dapat Anda hapus git -rm). Jadi gitingin memastikan Anda tahu apa yang Anda lakukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.