Sistem kontrol versi apa yang dapat mengelola semua aspek? [Tutup]

17

Beberapa bulan yang lalu saya menggali Subversion dan GIT dan kecewa. Mereka menangani KODE SUMBER baik-baik saja tetapi tidak pada aspek lainnya. Misalnya, situs web di bawah kontrol versi perlu mengelola kepemilikan file / direktori, akses baca & tulis file / direktori, Daftar Kontrol Akses, cap waktu, konten basis data. dan tautan eksternal. Apakah ada sistem kontrol versi yang dapat melakukan pengembalian yang sempurna seperti memuat ulang dari cadangan yang berumur sebulan?

Andy Canfield
sumber
12
Sepertinya Anda menginginkan sistem cadangan?
Macke
2
Sudahkah Anda mempertimbangkan menjalankan situs web Anda di bawah OS X di Mac? Time Machine mungkin merupakan solusi cadangan paling sederhana yang saat ini tersedia dan membuatnya sangat mudah untuk dibatalkan jika diperlukan.
1
Jika Anda benar-benar tertarik pada topik ini, Anda harus melihat penelitian dalam versi sistem file dan dalam versi database, yang melampaui sistem kontrol versi untuk kode sumber.
Jakob
apa salahnya menulis sedikit scripting untuk menangani hal-hal yang tidak ditangani scm? dengan cara itu Anda mendapatkan apa yang Anda inginkan DAN mendapatkannya di bawah kendali sumber.
Newtopian

Jawaban:

44

Anda bingung tentang peran sistem kontrol versi. Ini bukan dan tidak pernah dimaksudkan sebagai sistem cadangan untuk situs web yang sedang berjalan. Ia melakukan pekerjaan yang sangat baik dalam mengelola konten statis sehingga ia dapat berproduksi secara terkendali. Dengan penggunaan penandaan dan checkout yang tepat, bahkan situs yang cepat berubah dapat disimpan dalam sistem kontrol versi.

Sistem kontrol versi akan dapat memberi tahu Anda bagaimana Anda mendapatkan dari apa yang tampak seperti situs bulan lalu hingga seperti apa hari ini (setidaknya untuk komponen-komponen yang berada di bawah kendali sumber). Ini harus mencakup semua yang Anda butuhkan untuk membangun kembali situs web (tidak termasuk konten dinamis). Seperti yang telah dicatat oleh orang lain, setiap perubahan pada izin dan kepemilikan harus ditulis, dan skrip itu dimasukkan dalam kontrol versi.

Izin akses untuk situs web biasanya cukup sederhana. (Pada dasarnya, Anda perlu memastikan bahwa server web dapat membaca semua konten dan menulis sangat sedikit.) Dengan pengecualian kepemilikan direktori dari beberapa direktori yang perlu ditulis oleh subversi web-server, dan mungkin git, tentu saja dapat menangani izin. Direktori yang dapat ditulis oleh server web biasanya berisi konten dinamis (dibuat dan diperbarui dari situs web), yang dikelola secara terpisah dari sumber situs web.

Jika saya diminta untuk bekerja dengan situs web dengan izin dan ACL yang rumit di situs web Anda, saya akan memiliki keprihatinan serius tentang proses yang digunakan untuk mengelola situs web. Menerapkan sistem kontrol versi dan memindahkan ACL ke sana akan menjadi salah satu solusi yang akan saya pertimbangkan dengan serius.

Konten dinamis, seperti entri atau komentar blog, biasanya terkandung dalam database atau data lain daripada kontrol versi yang digunakan untuk membangun situs. Penyimpanan data dapat diatur untuk menyediakan kontrol versi kontennya (seperti perangkat lunak ini). Banyak wiki menggunakan sistem kontrol versi untuk melacak revisi.

EDIT:

Perbaikan yang saya gunakan adalah (a) Tidak ada kontrol versi sama sekali, (b) Situs produksi adalah situs master, (c) Arsip setiap kali ada perubahan, (d) Script arsip menghapus sampah seperti ACL, dan (e) skrip instal memperbaiki izin file seperti sampah lainnya.

Masalah-masalah ini dapat diatasi dengan mengimpor situs ke sistem kontrol versi dan mengubah proses Anda sehingga situs master diperbarui melalui sistem itu. (a), (b), dan (c) ditangani langsung oleh kontrol versi. Anda mungkin ingin menandai rilis untuk membuat (c) berfungsi lebih baik. (D) umumnya tidak menjadi masalah jika Anda hanya memiliki sistem penyebaran mengubah situs Anda. Saya tidak pernah membutuhkan ACL pada konten situs.

(e) seharusnya hanya dijalankan pada kreasi awal dan perubahan besar. Mungkin juga termasuk skrip yang memperbarui situs dari kontrol versi dan sering berjalan. Skrip ini cenderung sangat sederhana ketika Anda menjaga situs Anda dalam sistem kontrol permusuhan.

Tetapi mengapa tidak ada yang membangun sistem umum untuk melakukan ini?

Karena itu tidak diperlukan jika Anda menggunakan sistem kontrol versi.

Sistem kontrol versi BISA melacak semua hal ini, tetapi tidak ada yang bisa.

CVS dan Subversion melacak apa yang perlu Anda lacak jika Anda menggunakannya. Mereka tidak akan melacak hal yang perlu Anda lacak karena Anda tidak menggunakan sistem kontrol versi, juga tidak seharusnya. Mereka melacak apa yang Anda perlu lacak ketika Anda menggunakan sistem kontrol versi.

Saya telah bekerja dengan beberapa situs yang mengelola konten mereka menggunakan kontrol versi. Semua memiliki persyaratan yang berbeda untuk pementasan situs, frekuensi penyebaran, dan kelengkapan pembaruan. Setelah situs berada dalam kontrol versi memenuhi persyaratan lainnya relatif mudah dipenuhi. Dokumentasi untuk CVS dan Subversion memberikan saran untuk kemungkinan metode pembaruan.

Anda mungkin memerlukan ACL untuk membatasi akses ke area tertentu di dalam konten yang dikendalikan versi. Namun, saya cenderung bekerja berdasarkan kepercayaan. Kontrol versi memudahkan untuk melihat siapa yang melakukan apa saat itu. Jika Anda tidak memformat ulang file, mudah untuk mendapatkan riwayat anotasi file yang menunjukkan siapa yang menambahkan baris mana saat itu.

BillThor
sumber
+1 untuk menjabarkan alasan mengapa pertanyaan itu salah sejak awal.
Macke
2
+1 Namun, ada baiknya pertanyaan telah diajukan sehingga orang lain dapat memperoleh manfaat dari jawaban Anda.
oliver-clare
Sistem kontrol versi seharusnya memberi saya kemampuan untuk mengatakan "OK, di komputer lain di sini, buatkan saya situs itu pada 28 Juli." Kontrol versi lebih efisien daripada cadangan karena melacak perubahan. Kalau tidak, ya, cadangan harian akan melakukan pekerjaan dengan baik.
Andy Canfield
Ya, perbaikan yang saya gunakan adalah (a) Tidak ada kontrol versi sama sekali, (b) Situs produksi adalah situs master, (c) Arsip setiap kali ada perubahan, (d) Script arsip menghapus sampah seperti ACL, dan ( e) skrip instal memperbaiki izin file seperti sampah lainnya. Tetapi mengapa tidak ada yang membangun sistem umum untuk melakukan ini? Sistem kontrol versi BISA melacak semua hal ini, tetapi tidak ada yang bisa.
Andy Canfield
+1: Jawaban yang bagus. Namun saya ingin menambahkan bahwa tidak ada sistem kontrol versi melacak hal itu karena mereka TIDAK BISA. Izin dan nama pengguna adalah khusus untuk host dan formatnya khusus untuk sistem; tidak ada cara alat dapat secara otomatis port mereka ke host yang berbeda, terutama ketika itu sistem operasi yang berbeda.
Jan Hudec
10

Semuanya dan tidak ada sama sekali.

Merupakan ide yang buruk untuk mendapatkan kontrol sumber untuk mengelola detail-detail itu secara langsung, sesuai dengan pertanyaan Anda.

Namun, Anda dapat menulis skrip bash (* nix) atau skrip powershell (Windows), yang mencapai salah satu atau semua tujuan tersebut. Script ini dapat disimpan dalam kontrol sumber.

Kemudian Anda dapat menjadikan skrip itu sebagai salah satu artefak buatan Anda dan menjalankannya sebagai bagian dari penggunaan Anda.

pdr
sumber
Ini. Ide memiliki sumber sama sekali adalah bahwa Anda dapat menarik mereka keluar dari VCS Anda dan menggunakannya untuk membangun produk jadi.
Blrfl
2

IMHO sistem kontrol versi itu sendiri tidak dimaksudkan untuk digunakan dengan cara itu.

Tapi yang saya cenderung lakukan adalah memastikan bahwa Anda bisa mendapatkan versi dari kontrol sumber Anda hanya perlu menjalankan satu file build / file PowerShell dan semuanya sudah berjalan dan berjalan kembali.

Untuk ini, Anda perlu:

  • semua perpustakaan yang Anda gunakan tergantung pada kontrol sumber
  • file build yang mengatur lingkungan Anda
  • instruksi tentang persyaratan lingkungan Anda (Anda tidak ingin menempatkan instalasi sql server di kontrol sumber Anda)
KeesDijk
sumber
1

Saya percaya apa yang Anda butuhkan dalam kasus Anda adalah alat manajemen konfigurasi . Yang saya gunakan adalah boneka .

Mengutip Anda:

mengelola kepemilikan file / direktori, akses baca & tulis file / direktori,

Saya telah melakukannya dengan satu baris (memastikan pengguna ada, memastikan direktori ada, dll) ...

Daftar Kontrol Akses,

Jika ini adalah ACL windows maka ada alat CM spesifik untuk windows ...

cap waktu,

lagi perintah unix sentuh dalam satu baris dalam skrip boneka bisa melakukan ini untuk Anda.

isi basis data.

Itu membangun dalam banyak kerangka kerja, pekerjaan cron yang memastikan semuanya ada di sana?

dan tautan eksternal.

Tidak tahu apa-apa tentang itu.

Tentu saja setelah Anda menulis kode Manajemen Konfigurasi Anda, Anda mungkin ingin meletakkannya (atau mengambilnya di sistem yang terlibat) pada sistem kontrol versi. Anda tidak akan lolos dari itu :-).

Dimitrios Mistriotis
sumber
Saya tidak mengerti apa yang Anda maksud dengan "cap waktu - lagi satu perintah unix dalam satu baris dalam skrip wayang bisa melakukan ini". Di situs saya, untuk mendapatkan versi situs, ia memindai seluruh sitetree dan mengembalikan tanggal dan waktu file terbaru. Saya ingin kontrol versi saya "Checkout" untuk memberikan file stempel waktu yang sama dengan yang ada di checkin, tidak ditetapkan sebagai 'sekarang'. Bagaimana Anda melakukannya dalam satu perintah unix?
Andy Canfield
tentu saja, Anda mencari "sentuh", periksa ini: en.wikipedia.org/wiki/Touch_(Unix) . Umumnya ketika memeriksa sekarang-waktu akan diterapkan, tetapi jika karena alasan tertentu Anda ingin cap waktu yang berbeda ini adalah bagaimana melakukannya.
Dimitrios Mistriotis
Saya sebenarnya menyukai alasan pertanyaan Anda, Anda ingin mengotomatiskan sebanyak mungkin, yang merupakan "cara yang benar", Anda memerlukan beberapa pengetahuan tentang cara melakukannya dan apa yang pergi ke VControl dan apa yang tidak. Saya berharap lebih banyak orang di industri keluar berpikir sama ...
Dimitrios Mistriotis
0

Ada sistem kontrol versi akhir yang mengelola semua aspek dari semua dokumen digital. Itu disebut Xanadu dan diciptakan oleh Theodor Holm Nelson pada tahun 1960, bahkan sebelum hal-hal seperti sistem file umum. Jadi secara teori semuanya terpecahkan dengan sempurna. Dalam praktiknya, Xanadu tidak pernah diimplementasikan seperti yang dibayangkan oleh Nelson, tetapi mengilhami banyak sistem yang lebih khusus, termasuk Web dan sistem kontrol versi. Karya-karya Nelson masih layak dibaca - dan mereka dapat menjawab pertanyaan mengapa tidak ada VCS umum yang mengelola semua aspek.

Jakob
sumber