Bekerja pada proyek dengan banyak cabang, di mana setiap cabang akhirnya digabungkan kembali ke cabang utama, dan pada dasarnya diisolasi untuk mengembangkan fitur baru.
Basis data, yang merupakan MS SQL Server, memiliki skema bersama, namun masing-masing cabang membuat perubahan pada skema saat proses berlangsung.
Pertanyaan utama saya adalah apa cara yang baik untuk berurusan dengan berbagi skema dari cabang utama ke cabang yang diturunkan, sehingga perubahan yang dibuat ke cabang utama mudah digabung ke cabang yang diturunkan, tanpa menginjak perubahan baru dalam turunan cabang?
Jawaban:
Saya telah berhasil menggunakan metodologi berikut, diuraikan dalam Kontrol Versi dan Database Anda :
Saya sering mendengar pendapat 'bagaimana ini berbeda dari hanya menjaga skrip definisi objek di bawah kendali sumber?'. Perbedaannya sangat besar, karena ketika Anda menggunakan versi baru aplikasi Anda, Anda tidak akan hanya membuat database baru. Sering kali aplikasi Anda harus meningkatkan basis data yang ada, termasuk data yang ada . Ini adalah perbedaan penting, langkah-langkah peningkatan Anda perlu memastikan integritas dan konsistensi data yang ada selama peningkatan. Beberapa operasi sepele dalam kode (tambahkan kolom non-nullable dengan nilai default ke skrip definisi objek tabel, selesai), tetapi sebenarnya sangat menyakitkan pada penyebaran aktual (tabel memiliki 1,5 miliar baris, kolom tambah akan habis ruang log jika dilakukan dengan cara 'simpleton').
Bagaimana cara kerjanya dengan percabangan:
Perhatikan bahwa tidak ada alat yang terlibat, tidak ada skrip skrip ajaib, tidak ada penyihir dan tidak ada skrip klik-tombol-hasil-skrip yang terlibat. Ini adalah proses yang digerakkan oleh pengembang 100%, berdasarkan sumber (skrip). Banyak yang menemukan seluruh proses ini rumit, tetapi berhasil. Faktanya, sebagai pengguna SQL Server, Anda telah meningkatkan hasil dari proses ini dalam penggunaan harian Anda terhadap SQL Server: SQL Server itu sendiri menggunakan proses pemutakhiran basis data yang sangat mirip dan, seperti yang mungkin Anda harapkan, proses pengembangan produk membuat penggunaan ekstensif percabangan dan masalah yang Anda sebutkan adalah masalah yang sangat nyata yang harus diselesaikan.
BTW, bagaimana percabangan / integrasi sebenarnya terjadi berbeda antara produk-produk kontrol sumber, saya menggunakan istilah yang akrab dengan modus operasi mengintegrasikan perforce .
sumber
Meskipun jawaban saya mungkin tidak selebar Remus, saya menemukan ini sebagai solusi yang sangat bagus. Saya belum membuatnya dalam produksi dulu, jadi YMMV *.
Liquibase
Pada dasarnya ini adalah file XML di mana Anda membuat perubahan skema ke database Anda sebagai elemen baru di dalam file XML. Sebagai contoh:
Ini memiliki sintaks yang sepenuhnya disempurnakan sehingga Anda dapat melakukan apa saja yang Anda inginkan ke database Anda.
Anda juga menentukan dalam instalasi Liquibase Anda database apa yang Anda inginkan untuk versi. Kemudian Anda "menjalankan" .xml dengan Java executable (file jar) yang disertakan. Ini pada dasarnya menciptakan kembali perubahan-perubahan yang ditentukan dalam XML ke database Anda.
Kicker sebenarnya adalah Anda menyimpan file XML ini di folder versi yang sama dengan kode Anda. Jadi dalam contoh saya itu adalah Git. Saya memiliki file XML ini di folder proyek saya (tingkat yang sama dengan /.git) dan kemudian setiap kali saya beralih cabang file XML akan berubah ke versi cabang dan saya akan menjalankan file .jar dan database saya sekarang akan mencerminkan cabang itu.
* Catatan: Saya belum menyelesaikan implementasi karena saya kesulitan menghubungkan Java ke SQL Server. Membutuhkan beberapa driver jdbc dan semacamnya dan saya tidak berminat. Oleh karena itu, jarak tempuh Anda dapat bervariasi.
sumber
Di sini, di Red Gate kami segera merilis solusi versi database yang memanfaatkan SQL Compare dan SQL Source Control. Ini menggunakan pendekatan peningkatan skrip migrasi dan membasmi database dengan versi properti yang diperluas yang sesuai dengan revisi kontrol sumber.
Kami berharap untuk rilis pada pertengahan Desember. Ada kandidat rilis yang tersedia sekarang. Untuk informasi lebih lanjut, kunjungi:
http://www.red-gate.com/products/sql-development/sql-source-control/entrypage/migration
Kami berharap dapat membangun solusi ini dalam beberapa bulan mendatang, jadi beri tahu kami pendapat Anda.
sumber
Jika Anda dan menangani perubahan skema Anda dengan membuat skrip dan menjaga skrip-skrip itu di bawah kendali sumber, maka Anda harus dapat memperlakukan perubahan seperti yang Anda lakukan jika ada penggabungan kode lainnya. Anda dapat memilih untuk menggabungkan otomatis atau mengambil lebih banyak intervensi manual.
sumber
Saya berada dalam situasi yang sama di mana saya bekerja di situs web langsung dan beberapa cabang pengembangan di mana saya perlu mengubah skema database.
Saya menyelesaikannya dengan menulis post-checkout dan hook post-merge yang dapat digunakan dengan baik dengan git. Saya menyimpan semua migrasi saya dalam bentuk file SQL di direktori terpisah dan mengkomitnya di samping kode PHP yang diubah. Setiap kali saya melakukan a
atau a
git akan secara otomatis memanggil migrasi naik dan turun yang sesuai. Lihat implementasi saya di Github .
sumber