Saya sedang mempertimbangkan untuk memindahkan repositori cvs berusia 14 tahun (history intact) ke mercurial. Saya pikir saya sudah mendapatkan semua bit konversi teknis, tetapi saya masih memiliki beberapa pertanyaan tentang bekerja secara efektif di lincah.
Salah satu hal yang sering saya lihat di kotak pasir cvs pengembang perorangan (termasuk milik saya) adalah perubahan lokal yang tidak dikomit yang tidak siap untuk didorong ke jalur utama. Pemahaman saya adalah bahwa ini adalah hal yang buruk. Sebagian besar eksperimen saya dengan hg menunjukkan bahwa perubahan yang tidak dikomit adalah hal buruk untuk dimiliki. Ketidakmampuan untuk bergabung dengan mereka sudah cukup untuk itu. Jadi yang ingin saya ketahui adalah bagaimana orang lain yang menggunakan mercurial dalam coding sehari-hari menghadapinya. Bagaimana Anda menangani perubahan kode yang tidak lengkap ketika tiba saatnya memperbarui repositori Anda? Bagaimana Anda menghadapi perubahan lokal yang belum (ingin) Anda bagikan dengan pengembang lain?
Ada beberapa hal yang akan saya tambahkan.
Salah satunya adalah menyarankan alur kerja yang membuat penggunaan rak yang bijaksana , yang dikirimkan sebagai standar dengan TortoiseHg .
Setiap kali saya ingin mengkomit bagian dari direktori kerja saya saat ini, saya akan menyimpan perubahan yang tidak ingin saya komit, mengkompilasi ulang (untuk memastikan bahwa saya tidak menyimpan bit yang sekarang mengakibatkan kompilasi yang rusak) dan kemudian menjalankan pengujian saya . Kemudian saya akan melakukan set lengkap, bekerja dan diuji. Akhirnya saya akan menjalankan dua belas untuk mengembalikan perubahan saya.
Jika saya memiliki perubahan yang lebih permanen, katakan saya ingin file konfigurasi pada mesin pengembangan saya untuk selalu menunjuk ke port localhost 3333 daripada server produksi, maka saya akan melihat ke dalam menggunakan ekstensi Mercurial Queues, yang dikirimkan dengan Mercurial dan TortoiseHg .
sumber
Saya tidak percaya perubahan yang tidak dikomit secara intrinsik adalah hal yang buruk. Anda merujuk pada "ketidakmampuan untuk bergabung dengan mereka" - jika Anda memiliki perubahan yang tidak dikomit ke beberapa file, dan Anda menarik dan memperbarui perubahan ke file itu, Mercurial akan memulai proses penggabungan sama seperti jika Anda telah melakukan itu, kemudian meminta sebuah penggabungan. Apakah maksud Anda sesuatu yang berbeda?
Jadi, untuk perubahan lokal yang belum ingin Anda bagikan dengan pengembang lain, Anda memiliki dua pendekatan. Yang pertama adalah menjaga perubahan dalam copy pekerjaan Anda, tetapi tidak mendorongnya, dan yang lainnya adalah menyingkirkannya, dari copy pekerjaan. Yang Anda pilih tergantung pada apakah Anda ingin agar perubahan ini tersedia saat Anda bekerja.
Jika Anda menyimpannya di copy pekerjaan, perubahan yang masuk akan berfungsi dengan baik, jadi Anda hanya perlu menghindari membuat perubahan keluar, dan itu berarti menghindari melakukan itu. Jika file-file itu baru, itu mudah - jangan lakukan
hg add
itu. Jika sudah dilacak, maka Anda dapat secara khusus mengecualikan mereka dari komithg commit --exclude foo.txt
. Jika Anda memiliki banyak file untuk dikecualikan, atau akan mengecualikannya dari banyak komit (misalnya untuk perubahan permanen ke file konfigurasi lokal), lihat ekstensi kecualikan .Jika Anda siap untuk mengesampingkan perubahan, Anda memiliki serangkaian opsi lain. Hal yang paling sederhana adalah menggunakan
hg diff
pada file untuk menghasilkan tambalan yang menggambarkannya, yang Anda simpan di tempat yang aman, laluhg patch --no-commit
menerapkan kembali tambalan itu saat Anda menginginkan perubahan kembali. Anda dapat membuat ini lebih lancar dengan memasang ekstensi rak , ekstensi loteng , atau kerabat lainnya. Anda juga bisa menggunakan ekstensi antrian , tetapi itu menggunakan palu untuk memecahkan masalah. Anda bahkan bisa melakukan perubahan, kemudian memperbarui kembali ke induk dan melakukan pekerjaan lain di sana, meninggalkan perubahan di cabang anonim yang gemuk -hg commit -m 'temporary branch' && hg up $(hg log -r 'parents(.)' --template '{node}')
(walaupun mungkin lebih mudah dilakukan secara manual!). Namun, Anda harus berhati-hati untuk tidak mendorong perubahan itu.sumber
Dua pendekatan dasar digunakan untuk memisahkan aliran pembangunan.
Cabang Bernama. Idenya adalah, Anda bekerja di cabang Anda sendiri, nmichaels_branch_of_awesome. Dengan begitu Anda dapat melakukan perubahan Anda tanpa menggoreng pekerjaan orang lain. Kemudian Anda bergabung dari orang lain ketika Anda membutuhkan pekerjaan mereka, dan ketika tiba saatnya untuk fitur, Anda mendorong ke cabang yang lebih stabil untuk integrasi. Saya mendukung cabang bernama.
Klon anonim. Ini membuat repositori terpisah untuk kotak pasir Anda. Di sini Anda bermain-main sampai Anda mendapatkan apa yang Anda inginkan, kemudian (mungkin) melakukan patch MQ untuk komitmen Anda dan mendorong ke tempat Anda mulai. Saya tidak menyukai pendekatan ini, karena membutuhkan manajemen direktori, dan berpotensi MQ bekerja, yang bisa rumit. Dan dengan beberapa repo, mereka dapat mulai menjadi sedikit besar untuk ini. Yang mengatakan, ini tampaknya lebih disukai oleh para Kiln devs.
sumber