Berasal dari latar belakang SVN, salah satu hal tersulit untuk membiasakan diri ketika bekerja dengan sistem DVCS adalah cara mereka semua tampaknya menganggap setiap perubahan yang tidak dikomit sama sekali seperti bom waktu yang sedang berdetak.
Di Mercurial, jika Anda mencoba mengambil perubahan dan Anda memiliki perubahan yang tidak dikomit di copy pekerjaan Anda, Anda harus melompat melalui lingkaran untuk mendapatkannya hanya untuk menggabungkan perubahan yang masuk. Cobalah untuk beralih cabang? Ini akan memaksa Anda untuk mengesampingkan semuanya dan kemudian Anda harus segera mengosongkan semuanya di ujung lainnya. (SVN tidak memiliki masalah dengan salah satu skenario ini.)
Git hampir sama caranya. Saya bekerja berdampingan dengan pengembang lain dalam suatu proyek, dan saya hanya mencoba untuk memilih salah satu dari komitmennya ke dalam garpu saya. Itu menolak untuk membiarkan saya karena saya memiliki perubahan komitmen dalam copy pekerjaan saya, pada file yang sama sekali berbeda dari yang diubah dalam komitnya. Bahkan tidak ada opsi penggabungan; rupanya saya harus menyimpan perubahan saya terlebih dahulu!
Jika seseorang memperlakukan sesuatu yang sama sekali tidak berbahaya dengan sangat hati-hati, saya akan menyebutnya "fobia," ketakutan irasional yang harus dianggap sebagai gangguan mental. Tapi Git dan Mercurial dirancang oleh dua tim pengembang cerdas dan rasional yang berbeda, jadi saya harus bertanya-tanya apakah mereka tahu sesuatu yang tidak saya sadari.
Apakah ada alasan teknis yang membenarkan sikap ini terhadap perubahan yang tidak dikomit? Dan jika demikian, mengapa masalah yang dipermasalahkan tampaknya hanya ada di DVCSes?
sumber
Jawaban:
Lanjut
Ini bukan fobia, penegakan (terkadang keras) untuk mengikuti tata krama yang baik "sering melakukan" (pengguna SVN kadang-kadang takut dengan gaya ini)
Dan, akhirnya,
hg qnew|qpop|qpush
adalah harga wajar kecil untuk kerapian dan ketertibansumber
Saat Anda bergabung atau memilih-ceri
git
, Anda segera membuat komit. Operasi tidak selesai sampai komit selesai dan bagian dari sejarah.Sekarang, apa yang akan terjadi jika
git
Anda memperbolehkan perubahan yang tidak dikomit di direktori kerja Anda? Anda akan memiliki (kurang lebih) waktu yang sulit untuk membedakan antara konflik perubahan / penggabungan yang harus Anda selesaikan untuk penggabungan / pemilihan ceri, dan perubahan yang Anda perkenalkan sendiri. Juga, hampir tidak mungkin bagi Anda untuk menguji apa yang sebenarnya Anda lakukan.Dengan demikian, memaksa direktori kerja yang bersih untuk menggabungkan situasi membantu menjaga hal-hal sederhana dan mudah dikelola. Lagi pula, yang perlu Anda lakukan adalah menyembunyikan perubahan yang tidak dikomit sebelum penggabungan, dan melepaskannya setelahnya. Perhatikan, bahwa dalam alur kerja
Anda memiliki dua operasi penggabungan (!). Yang menggabungkan komit terakhir Anda dengan perubahan yang masuk, dan yang menggabungkan perubahan yang tidak dikomit Anda dengan komit gabungan yang dihasilkan. Dengan cara ini, Anda hanya perlu menggabungkan dua hal menjadi satu, menghindari kebingungan yang akan timbul dari upaya menggabungkan tiga hal menjadi satu dalam satu operasi sekaligus mencoba mengabaikan ketiga hal ini. Tanda
git stash
/git stash pop
membuatnya mudah dan eksplisit bahwa Anda mengabaikan perubahan yang tidak dikomit untuk penggabungan.sumber