Saya akan mencoba dan membuat strategi untuk kontrol versi untuk perusahaan saya; kami saat ini menggunakan SVN tetapi tidak ada struktur untuk itu - kami pada dasarnya hanya memiliki trunk dan hanya berkomitmen untuk itu. Baru-baru ini manajer pengembangan memulai repositori kedua yang bertindak sebagai "tag" kami, tetapi harus digabung secara manual dengan "trunk" karena itu bukan bagian dari repositori yang sama tetapi yang benar-benar terpisah. Akibatnya hanya ada satu folder, yang disebut "Dev" (sebenarnya ada folder "Dev" yang berbeda pada tanggal yang berbeda tetapi hanya "Dev" adalah yang utama) dan di bawah itu adalah segalanya; semua proyek lainnya. Ini tidak diatur oleh proyek sama sekali, tidak memiliki konsep cabang / tag / trunk atau apa pun. Orang yang mengaturnya awalnya (sudah lama, tentu saja) sepertinya tidak tahu cara mengatur SVN sama sekali, dan sejak itu tidak ada yang repot-repot belajar bagaimana melakukan sesuatu dengan benar karena takut merusak sesuatu. Kami tidak menggunakan CI apa pun (atau pengujian otomatis, sayangnya).
Pertama, haruskah kita memisahkannya dengan proyek? Misalnya, kami memiliki: Dua situs web ASP.NET (bukan Aplikasi Web, Situs Web), Layanan Web, folder penempatan untuk semua skrip tabel dan prosedur tersimpan, dua klien baris perintah untuk proyek eksternal yang dipanggil oleh WebSites dan folder bersama yang memiliki objek bisnis umum dan sejenisnya. Haruskah masing-masing menjadi proyek mereka sendiri dengan pengaturan cabang / tag / trunk, atau harus seperti ini:
dev/
branches/
tags/
trunk/
Site1/
Site2/
WebService/
SharedCode/
dan memiliki semua cabang dan semuanya memiliki salinan seluruh folder Dev? Pendekatan itu mungkin lebih mudah untuk ditelan karena kita sering mengalami situasi di mana kita perlu membuat perubahan dalam perpustakaan kode bersama dan setidaknya satu (biasanya keduanya) dari situs web juga.
Kedua, kami melakukan rilis reguler ("push" dalam bahasa kami) ke server dev dan server langsung kami. Dari apa yang saya baca cara terbaik untuk menangani ini adalah bahwa semua pengembangan masuk ke trunk /, cabang adalah "sementara" dan digunakan untuk menambahkan fitur baru yang mungkin mempengaruhi trunk, dan tag adalah untuk rilis? Jadi, kami mendorong setiap bulan katakanlah, dan saya sedang mengerjakan modul baru. Saya akan bercabang batang, dan menggunakan cabang itu untuk kode saya, menulis dan mengujinya dan apa pun. Ketika modul selesai, saya akan menggabungkannya kembali ke trunk (dan mungkin menghapus cabang), dan ketika kami siap untuk digunakan, kami akan menandainya ("May2011" katakan saja). Jika kami memiliki perbaikan bug setelah ditayangkan, itu akan diperbaiki di tag May2011 dan digabung menjadi trunk (jadi trunk juga memperbaikinya), dan kemudian May2011 akan didorong keluar lagi dengan perbaikannya? Apakah ini maksud pemberian tag?