Sebagian besar, ini adalah alur kerja yang biasa digunakan dengan VCS apa pun yang telah kami gunakan sejauh ini. Dengan beberapa (CVS, SVN) itu lebih sulit dilakukan, dengan GIT itu sepele. Yang mengatakan, saya punya dua komentar:
Pertama, ada dua aliran pemikiran ketika datang ke cabang fitur:
- Gabungkan mereka
- Rebase mereka
(1) adalah apa yang tampaknya disarankan artikel. Masalah dengan komit gabungan disebut Evil Merge . Khususnya, mereka yang bergabung dengan jalur pengembangan di mana fungsi telah mengubah semantik di salah satu cabang, tetapi penggabungan otomatis gagal untuk menambal semua kejadian dalam kode yang berasal dari cabang lain. Regresi yang diperkenalkan dengan cara itu terkenal sulit untuk di-debug. Sebagai pengguna GIT, Anda biasanya bisa lebih santai tentang regresi, karena Anda harus git bisect
menemukan penyebabnya untuk Anda secara otomatis. Namun, dalam situasi yang dijelaskan, git bisect
akan menunjukkan komit gabungan, yang tidak membantu Anda sama sekali.
(2) menghindari masalah ini dengan mencoba mempertahankan sejarah linier mungkin. Orang-orang yang menentang rebounds mengklaim itu membatalkan pengujian apa pun yang mungkin Anda lakukan sebelum rebase.
Secara pribadi, saya tegas di camp (2), karena saya menilai validitas git bisect
hasil lebih dari potensi hilangnya cakupan tes, yang mudah dikompensasi dengan menggunakan sistem CI yang tepat.
Kedua, saya telah memutuskan untuk saya bahwa mendorong antar pengembang jarang merupakan ide yang bagus. Ada masalah keamanan yang terlibat dalam memungkinkan semua orang masuk ke kotak Anda untuk mengambil, atau menjalankan git-deamon secara lokal, dan, yang lebih penting, dalam tim yang tidak terlalu kecil, pengawasan dapat hilang dengan cepat.
Yang mengatakan, saya semua mendukung repositori pementasan (kadang-kadang juga disebut awal ), yang memungkinkan subteams untuk berbagi pekerjaan mereka dalam proses melalui server pusat yang, bagaimanapun, berbeda dari yang utama (sering ke luar- menghadap, jika tidak publik). Biasanya, setiap subteam akan mempertahankan satu cabang topik untuk dirinya sendiri, dan sistem CI akan melakukan penggabungan gurita periodik dari semua cabang topik menjadi satu cabang integrasi besar, mengeluh tentang konflik dan membangun kesalahan.
git bisect
diberikan sebagai alasan untuk menjaga strategi flat itu juga.git bisect
sendirian. Ini terjadi ketika fitur A mengubah fungsi yang juga digunakan fitur B. Semua tes akan lulus di kedua A dan B sebelum penggabungan, tetapi setelah tes penggabungan dapat pecah karena perubahan yang tidak kompatibel antara A dan B - tetapigit bisect
tidak dapat sebagian menerapkan satu cabang ke yang lain, jadi satu-satunya petunjuk adalah bahwa gabungan menggabungkan adalah saat bug diperkenalkan.Saat ini saya sedang dalam proses melakukan refactoring besar-besaran dan lama (mengubah aplikasi dari satu ke perangkat GUI lainnya) dan melakukan alur kerja sentase-sentris yang sukses, karena anggota tim lainnya terus bekerja pada fitur-fitur baru:
Sebagian besar ada dua cabang utama, di
master
mana fitur baru dikembangkan dantoolkit-conversion
cabang. Aturan yang paling penting adalah sederhana: lakukan hanya hal-hal ditoolkit-conversion
cabang yang relevan untuk konversi. Setiap kali ada sesuatu yang dapat dilakukan dimaster
(toolkit GUI lama), saya melakukannya di sana dantoolkit-conversion
mengubah perubahan saya kemaster
kepala baru . Aturan lainnya adalah menjaga agartoolkit-conversion
cabang tetap pendek. Karenanya saya sering menggunakan reset, cherry-pick dan amend-commit dan rebase untuk merekatkan milik lebih kecil ke yang lebih besar (yang pada akhirnya memiliki tujuan yang sama). Ini juga berfungsi dengan baik ketika saya sudah mencoba sesuatu yang tidak berfungsi dengan baik untuk "membatalkan" perubahan atau setelah saya refactored beberapa kode dengan kode pembantu sementara.Saya telah memutuskan untuk tidak menggabungkan perubahan dari
master
menjaditoolkit-conversion
cabang, karena akan jauh lebih sulit untuk mengubah kembali komitmen sebelumnya untuk menjaga cabang tetap bersih dan mudah ditinjau. Juga, penggabungan mungkin menimbulkan konflik yang resolusinya tidak sejelas ketika menjaga riwayat bersih.Tentu saja, alur kerja ini juga memiliki kelemahan. Yang paling penting adalah, itu hanya bekerja dengan baik untuk satu orang. Ketika saya memaksa-mendorong
toolkit-conversion
cabang setelah rebased ke kepalamaster
, menariknya pada repositori lain menjadi sulit (otomatis rebasing ke cabang pelacakan sering gagal dengan konflik).Pada akhirnya,
toolkit-conversion
cabang saya tetap pendek, bersih dan mudah ditinjau. Saya tidak bisa membayangkan telah melakukan hal yang sama kuatnya dengan, misalnya, SVN.sumber
Di perusahaan tempat saya bekerja saat ini, kami telah menerapkan variasi model percabangan yang sama untuk sementara waktu. Kami juga telah menggunakan scrum sehingga kami melakukan cabang per alur kerja cerita.
Satu-satunya masalah yang kami miliki sejauh ini adalah ketika tim cukup besar dan lebih dari satu cerita dapat dimulai dan cerita-cerita itu saling bergantung satu sama lain, itu menjadi semacam kekacauan untuk menggabungkan perubahan antara cabang dan kembali ke menguasai.
Selain itu, ini telah terbukti dapat dipercaya :).
sumber
Saat ini saya sibuk mengadaptasi alur kerja ini. Saya pikir ini alur kerja yang cukup baik, karena menggunakan model percabangan di mana git unggul.
Satu-satunya downside kecil adalah bahwa dibutuhkan disiplin dalam menahan alur kerja ini dan tidak mencoba untuk mengambil jalan pintas.
Pengembang kohana juga menggunakan alur kerja ini, dan mereka sepertinya sangat menyukainya.
sumber
Kami menggunakan alur kerja serupa di tempat kerja, tetapi sedikit kurang rumit. Namun sangat terinspirasi oleh alur kerja ini, karena saya sudah membaca artikel ini berkali-kali. Saya bahkan memiliki pdf model percabangan dicetak dalam warna di samping meja saya :)
Produktif. Bagaimana Anda mendefinisikan produktivitas? Ya, dalam pikiran saya yang paling penting adalah memiliki kualitas tinggi, setidaknya untuk mencoba dan mencapai kualitas yang lebih baik setiap saat. Terus meningkatkan proses dll. Jika Anda dapat menghasilkan kode kualitas, produktivitas akan mendapat manfaat darinya. Jadi pertanyaannya adalah: Apakah ini meningkatkan kualitas perangkat lunak? Dan jawaban saya untuk itu pasti ya.
Apa yang paling saya sukai dengan model percabangan jenis ini, adalah ia memperkenalkan cabang-cabang dalam berbagai lapisan kualitas. Semakin ke kanan dalam gambar, semakin tinggi stabilitas dan kualitas semakin tinggi. Cabang utama adalah suci dan semua komitmen di atasnya harus dianggap sebagai versi stabil dari perangkat lunak. Semakin ke kiri Anda pergi, semakin eksperimental dan semakin rendah stabilitas yang Anda dapatkan.
Segera setelah Anda menguji fitur-fitur baru dan perbaikan bug, Anda dapat secara bertahap mentransfernya dari kiri ke kanan dan dengan demikian memindahkan kode dengan kualitas tinggi tepat ketika Anda tahu bahwa kode memenuhi persyaratan kualitas yang Anda minta dari kode. Yah, setidaknya secara teori, karena Anda tidak dapat menguji semuanya hingga 100% dan tahu pasti bahwa kode tersebut tidak mengandung bug, karena selalu ada bug. Tapi itu memungkinkan Anda untuk menjaga kepercayaan diri yang tinggi.
Tidak ada yang menyebalkan sebagai programmer, selain bekerja dalam sistem di mana tidak ada yang percaya kode, karena mereka tahu itu hanya menyebalkan dan ada banyak bug di dalamnya.
Sangat penting untuk memikirkan model percabangan Anda sehingga cocok dengan kebutuhan organisasi Anda. Hanya karena model ini berfungsi baik untuk sebagian orang, tidak berarti model ini optimal atau diinginkan untuk orang lain.
Selalu ada trade off dan bahkan dalam kasus ini. Satu trade off adalah jumlah cabang versus kompleksitas. Dengan memperkenalkan banyak jenis cabang yang berbeda, Anda meningkatkan kompleksitas alur kerja. Misalnya mungkin salah untuk selalu memaksa orang untuk membuat cabang fitur baru, ketika mereka mencoba untuk memperbaiki bug sederhana dengan mengubah beberapa baris kode.
Kita semua tahu bahwa bug lebih atau kurang rumit untuk dipecahkan. Jadi, ketika bug sepele ditemukan Anda mungkin ingin mengurangi kompleksitas dan administrasi untuk menyingkirkan overhead tambahan dan hanya membiarkan orang berkomitmen langsung ke mis master atau mengembangkan cabang. Tetapi karena sifat perbaikan Anda menjadi lebih rumit, ada baiknya biaya tambahan untuk membuat cabang baru bagi mereka. Terutama jika Anda tidak yakin dengan ukuran dan panjangnya atau jika Anda ingin meningkatkan kolaborasi antara Anda dan pengembang lainnya.
Ini tidak diragukan lagi pendekatan yang baik dan mungkin cocok untuk sebagian besar kasus karena kebanyakan dari kita memiliki proses pengembangan yang sama, tetapi mungkin tidak cocok untuk semua orang. Saya sangat mendorong Anda untuk memikirkan bagaimana Anda menangani kode Anda sekarang, dan mencoba membuat model percabangan yang sesuai dengan yang sudah Anda miliki.
Poin terpenting adalah memulai dengan git dan sisanya akan mengikuti secara alami. Mulai yang sederhana dan secara bertahap tingkatkan! Jadilah kreatif!
Bersulang
sumber