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?
sumber
Jawaban:
Jika Anda menginginkan proses build yang disatukan, maka pastikan untuk meletakkan cabang / tag / trunk di root, seperti ini:
Jika Anda tidak memerlukan proses pembangunan yang terpadu, maka Anda dapat menempatkan cabang / tag / batang dalam setiap proyek jika Anda mau. Namun, mungkin sulit untuk bermigrasi ke gedung yang disatukan setelah memasukkannya ke dalam setiap proyek. Bangunan terpadu memiliki kelebihan, seperti menghilangkan kebutuhan untuk menerbitkan komponen bersama di antara proyek - mereka semua adalah bagian dari bangunan.
Secara pribadi, saya suka proses pembangunan terpadu. Selain itu, saya tidak berpikir Anda harus memiliki proyek "dev". Anda seharusnya memiliki proyek langsung di bawah trunk, dan kemudian cabut trunk ke cabang dev. Gunakan tag untuk rilis. Sebagai contoh, saya akan melakukannya seperti ini:
sumber
Saya akan menyarankan bahwa jika proyek terkait atau berbagi kode maka mereka menginginkan trunk yang umum. Jika mereka independen maka mereka ingin batang yang terpisah atau bahkan repositori yang terpisah. Jika Anda perlu memberikan salinan riwayat svn kepada pihak ketiga untuk suatu proyek, maka akan jauh lebih mudah jika berada dalam repositori terpisah.
Jadi dalam kasus Anda kedengarannya seperti tata letak yang Anda buat sketsa di atas akan masuk akal, karena Anda telah berbagi kode dan Anda ingin cabang / tag untuk memasukkan kode bersama itu.
Secara pribadi saya juga akan menambahkan peringatan bahwa apa pun yang dilakukan untuk membangun trunk harus, harus atomik dan tidak boleh melanggar tes unit. Cabang adalah untuk pekerjaan yang belum selesai dalam proses. Saya berharap bagasi menjadi kandidat rilis potensial pada titik mana pun.
sumber
Berikut ini adalah cara terbaik untuk meletakkan repositori Subversion
Dengan cara ini Anda dapat memeriksa masing-masing proyek sendiri.
Jika Anda ingin memeriksa semua 3 proyek dan melakukan pembangunan terpadu dengan beberapa skrip / sistem build monolitik kemudian selidiki menggunakan modul master dengan svn: eksternal memetakan semua proyek lain ke dalam master
trunk
.Sekilas ini lebih rumit tetapi ini adalah cara yang paling dapat dipelihara dan idiomatis untuk menyelesaikan masalah ini dengan Subversion.
sumber