Kami sekarang sedang dalam proses beralih dari svn ke git (setelah satu tahun dihabiskan untuk meyakinkan orang, ya!) Di perusahaan saya.
Sejauh ini, ini semua menjadi lebih baik tetapi ada satu hal kecil yang saat ini kami miliki dalam alur kerja kami sehingga saya tidak dapat menemukan padanan yang baik juga.
Saat ini, semua pengembang kami bekerja secara master. Setiap triwulan, kami cabang master ke cabang Xx, yang nantinya akan menjadi rilis terbaru kami. Ini berarti repo svn kami terlihat seperti ini:
- bagasi
- ranting
- 3.8
- 4.1
- 4.2
- ...
Kami tidak benar-benar menggunakan tag.
Sesekali, ada perbaikan bug mendesak yang ditemukan.
Cara saat ini bagi kita untuk melakukannya adalah:
- Perbaiki di master
- SVN menggabungkan kisaran komit yang relevan kembali ke cabang yang relevan (Mungkin rilis terbaru kami, mungkin lebih).
Kami berada di industri luar angkasa, sehingga cabang kami berumur panjang dan proses peningkatan pelanggan agak lama, itulah sebabnya kami telah bekerja seperti itu sejauh ini.
Sekarang, bagaimana bisa setara dengan git?
Sejauh ini, saya telah mencoba untuk memperbaiki bug di cabang yang dihasilkan dari master, dan kemudian menggabungkan cabang ini kembali di master dan di 4.3 (misalnya). Masalahnya, cabang perbaikan terbaru berisi sejarah master, dan semua komit antara master dan 4.3 juga digabungkan, yang tidak kami inginkan.
Hal-hal yang dapat saya pikirkan sejauh ini:
- Saya telah melihat metode Git Workflow yang sangat sukses , dan solusi mereka adalah untuk memperbaiki bug di cabang rilis dan menggabungkannya kembali, bukan sebaliknya. Ini bisa berfungsi dalam kasus kami, tetapi akan agak rumit karena kami harus sudah tahu cabang tertua yang ingin kami perbaiki bug sebelum benar-benar memperbaiki bug.
- Solusi lain adalah memperbaiki di master, dan kemudian cherry memilih commit (seperti yang kita lakukan untuk penggabungan svn hari ini). Yang menjengkelkan di sini adalah bahwa dalam kasus ini kita kehilangan sejarah tentang apa yang telah digabungkan kembali ke mana, karena pilihan ceri terlihat seperti komitmen baru dan kita kehilangan hubungan.
Jadi apa cara "baik" untuk melakukannya? Haruskah kita memperbaiki komitmen dalam sejarah, atau memilih cherry dan secara manual melacak apa yang telah digabungkan, atau bahkan sesuatu yang lain?
Jika memiliki sedikit pengalaman produksi dengan git, maka saya yakin saya mungkin melewatkan sesuatu.