Beralih ke kontrol sumber

10

Ours adalah perusahaan yang cukup kecil (3-4 programmer dan 3-4 desainer situs) yang mengembangkan aplikasi web PHP satu-tujuan yang menyediakan fungsionalitas ke sekitar 100+ situs web. Kami telah beroperasi selama beberapa tahun di lingkungan pengembangan dan produksi terpisah yang telah bekerja dengan cukup baik. Selalu ada cukup fitur terpisah untuk dikembangkan sehingga programmer tidak pernah benar-benar berbenturan dan lebih nyaman untuk bekerja tanpa kontrol sumber; meskipun beresiko kehilangan data dan kami memiliki cukup banyak file yang hilang dalam gerakan yang tidak disengaja.

Pertimbangan lainnya adalah bahwa desainer kami tidak mengerti teknologi (saya memperkenalkan mereka ke markah html, alih-alih menggunakan WYSIWYGs). Ini telah menjadi salah satu alasan untuk ragu-ragu beralih ke versi.

Namun, sekarang kami telah mencapai lebih dari 100 situs dan tim pengembangan terus bertambah, saya mencoba untuk menstandarisasi prosedur kami dan kontrol sumber tampaknya merupakan langkah logis sejauh yang dilakukan oleh programmer. Saya berharap ini juga akan mempercepat penyebaran patch kami.

Sayangnya, pengalaman saya sangat terbatas dengan pengaturan sistem kontrol sumber. Yang ingin saya dengar dari orang-orang dengan pengaturan serupa, atau pengalaman beralih:

1) Apakah Anda versi segalanya (situs, css, templat html, dan kode aplikasi) dan dengan demikian memaksa desainer untuk belajar versi? Atau hanya pengembang yang bekerja pada kode aplikasi?

2) Apa beberapa jebakan yang harus diperhatikan ketika awalnya mengatur kontrol sumber?

3) Penempatan dev => tips produksi untuk kontrol sumber.

Terima kasih atas semua wawasannya.

Sunting 1: Dang. Semua orang sejauh ini merekomendasikan untuk mengendalikan semuanya. Itu akan membuat saya kehilangan rambut saya lebih awal. Mungkin akan memicu pertanyaan baru dalam waktu dekat. Terima kasih untuk nasehatnya sejauh ini, teruskan!

Sunting 2: Banyak jawaban bagus, dan kami akan melihat ke berbagai sistem kontrol versi. Terima kasih atas balasan semuanya!

DTest
sumber
@mattdm ahh, 'version-control' ... saya mencoba 'source-control' / sigh
DTest
Juga "kontrol revisi".
mattdm
Adobe dan sebagian besar pengembang perangkat lunak grafis besar lainnya sudah memiliki implementasi sendiri kontrol versi aset - yang menunjukkan bahwa ini sebenarnya harus lebih diinginkan oleh desainer imho (dan ya itu termasuk aset versi dan bukan hanya file deskriptor teks).
Oskar Duveborn

Jawaban:

10

Sangat membantu untuk memiliki semua versi, bahkan untuk desainer. Dan jika diimplementasikan dengan baik dengan pelatihan yang baik, saya pikir mereka akan merasa lebih bermanfaat daripada memberatkan.

Jika Anda baru memulai, saya sangat menyarankan menggunakan sistem kontrol versi terdistribusi seperti git atau lincah . Ini adalah tren umum di dunia, dan ada banyak keuntungan. Sangat mudah untuk bekerja dalam mode terputus, tanpa ketergantungan jaringan dan kemampuan untuk melakukan pekerjaan pribadi, tidak terpoles masih di bawah kontrol versi, memeriksa semuanya secara terpusat ketika sudah siap.

Dan, bukan untuk menggunakan banding ke otoritas atau apa pun, tapi periksa apa yang dikatakan Joel Spolsky tentang topik ini . (Kutipan pilihan: "Subversi = Lintah. Mercurial dan Git = Antibiotik") Pendekatan dari awal adalah sebuah kemenangan.

mattdm
sumber
terima kasih atas jawabannya, mattdm. Saya akan memeriksa tautan-tautan tersebut
DTest
+1 untuk penunjuk itu ke artikel Spolsky; Saya baru saja membaca tutorial Hg-nya (HgInit) dan saya pikir saya mulai mendapatkan dVCS, untuk pertama kalinya. Terima kasih (kamu dan Joel).
MadHatter
3

Saya akan mengatakan meletakkan semuanya di bawah kontrol versi. Setelah semuanya berfungsi, Anda dapat menyalinnya ke tag yang untuk sebagian besar sistem SCM tidak memerlukan banyak ruang disk di server.

Sejauh perangkap awal pergi Anda seharusnya tidak perlu terlalu khawatir; mengkomit semuanya ke server dan jika itu tidak benar Anda dapat mengacaknya dan menghapus hal-hal tambahan nanti. Satu-satunya hal yang tidak akan saya lakukan adalah artefak yang dibangun dari sumber, yaitu, file kode java termasuk dalam kontrol versi tetapi bukan kelas yang dikompilasi atau seluruh ISO / DVD dari biner "dibangun dari sumber".

Dev untuk produksi mudah, di setiap tonggak utama membuat cabang. Layout direktori dalam sistem kontrol versi biasanya terlihat seperti:

/ trunk / proyek / cabang / proyek / versi1 / cabang / proyek / versi2 / cabang / proyek / versi3

Jadi katakanlah Anda menemukan bug dalam versi 2 produk, Anda menavigasi ke cabang itu, memperbaikinya, dan merilis versi 2.1. Semua sementara Anda bekerja pada folder / trunk / proyek untuk versi baru 4 dan terserah Anda fitur mana yang digabungkan ke belakang dan ke depan.

Jangan biarkan peminum kool-SCM menipu Anda, ada sedikit perbedaan fungsional antara sistem kontrol versi populer di luar sana, yaitu Subversion dan Git. Yang paling penting bagi tim Anda adalah seberapa baik server-server itu berintegrasi dengan alat yang ada. Saya tidak suka WYSIWYGs baik tetapi pasti baik untuk memiliki eclipse-php atau IDE lain yang kompatibel dengan server.

vinnyjames
sumber
Oh man, kamu butuh bantuan kool yang lebih baik. Anda dapat menggunakan kontrol versi terdistribusi untuk hanya mereplikasi sesuatu seperti sistem CVS atau SVN, tetapi sebenarnya ada perbedaan mendasar. (Ini bukan untuk mengetuk SVN, yang baik untuk apa yang dilakukannya, ingatlah.)
mattdm
3

Saya seorang pengembang dan telah terlibat dalam bekerja sebagai admin TI sebelumnya.

Untuk menjawab pertanyaan spesifik Anda:

1) Ya, Versi segalanya.

2) Sarankan Anda menyiapkan repositori kontrol versi dummy dan proyek dummy untuk dipelajari orang.

3) Tandai versi yang dimasukkan ke dalam produksi. bahkan cobaan. Kemudian Anda selalu dapat melihat versi spesifik yang dijalankan seseorang.

Saya melihat Anda telah menandai pertanyaan CVS.

Saran saya adalah untuk melihat serius subversi sebagai gantinya, dikombinasikan dengan TortoiseSVN yang membuatnya sangat mudah digunakan. Ada juga TortoiseCVS juga.

Saya sarankan Anda menjalankan tutorial di rumah tentang kontrol versi. Saya akan terkejut jika pengembang / desainer Anda belum pernah melihat ini sebelumnya. Kura-kura hanya membuatnya sangat user friendly.

Dapat juga bermanfaat untuk menginstal salah satu antarmuka web ke cvs atau subversi.

Alasan saya menyarankan subversi terhadap CVS adalah bahwa meskipun CVS sangat bagus, ia memiliki beberapa masalah desain dan implementasi yang serius. The biggies bagi saya adalah: 1) Anda tidak dapat versi direktori 2) Penanganan file biner tidak terlalu baik karena banyak hal default untuk menjadi teks. 3) Tidak ada atom yang dilakukan. 4) Saya ingat sering mengacaukan dan meninggalkan file kunci di sekitar yang saya harus hapus secara manual dari toko kode. Ada ruang untuk korupsi dalam melakukan ini sejak Anda mengunci file. 5) Dukungan SSL dan mengelola pengguna / kata sandi

Subversi pada dasarnya memperbaiki semua masalah yang mungkin banyak lainnya. Ini juga memiliki banyak fitur canggih seperti eksternal (yang sebenarnya saya gunakan). Dan mungkin untuk menghubungkan pengguna / grup ke direktori aktif yang mungkin bermanfaat bagi Anda. Saat itu saya menggunakan CVS yang tidak tersedia. Mungkin sekarang, saya belum memeriksa.

Mungkin perbedaan terbesar untuk membuat kepala Anda svn menggunakannya adalah bahwa Anda tidak membuat tag. Alih-alih Anda membuat apa yang tampak sebagai salinan di mana direktori proyek disalin ke folder Tag dan diberi nama. Lihatlah dokumentasi dan Anda akan melihat apa yang saya maksud. Saya tahu itu terlihat aneh tetapi Anda terbiasa.

Situs web ini mungkin bermanfaat (walaupun saya tidak bisa menjaminnya): Menyiapkan repositori svn modular untuk situs web http://www.howtoforge.com/set-up-a-modular-svn-repository-for -php-situs web

Mat
sumber
Ya, saya hanya menandai sebagai cvs karena saya tidak dapat menemukan tag yang tepat (yang ternyata 'kontrol versi') saya telah bermain dengan svn sedikit di masa lalu dan mungkin akan memeriksa git dan beberapa lainnya sebelum membuat keputusan akhir. Terima kasih atas sarannya juga, terutama tentang versi dummy. Tautan itu akan sangat membantu karena saya yakin itu akan menjadi salah satu pertanyaan saya ketika saya akhirnya mengatur kontrol versi
DTest
3

Dengan hormat untuk banyak dari kebijaksanaan yang muncul di atas - dan itu adalah bijaksana - peluncuran kontrol versi seperti peluncuran sistem pemantauan. Klien saya mengatakan "apa yang harus saya pantau", dan jawaban yang jelas adalah "pantau semuanya". Tapi ini bukan kabar baik: mereka memiliki 350 sistem, yang masing-masing memiliki 20-30 variabel sistem plus banyak variabel penggunaan khusus, dan mereka semua dapat dimonitor dengan berguna; tetapi hanya ada satu dari saya, dan mereka ingin melihat beberapa hasil dalam dua minggu.

Jadi, meskipun saya setuju bahwa praktik terbaik adalah mengontrol semua versi, jika ini pada awalnya tidak praktis, mulailah dengan mengendalikan hal-hal yang kurangnya kontrolnya telah menyebabkan Anda paling bermasalah sampai sekarang .

Jika sebagian besar pemadaman disebabkan oleh kode aplikasi, mulailah dengan mengendalikannya; jika sebagian besar dengan tambalan CSS yang tidak direncanakan, kendalikan itu; dan seterusnya.

Ini tidak hanya akan memberi Anda pengembalian terbaik untuk investasi waktu, tetapi juga memberi Anda alasan kuat untuk memperpanjang penggunaan kontrol versi di masa depan: "Karena kami menambahkan kontrol versi ke kode aplikasi, pemadaman yang tidak terencana selama 30 menit telah turun dari 11 sebulan menjadi 2. Keduanya disebabkan oleh perubahan HTML statis, jadi kami bermaksud untuk mengontrol versi selanjutnya. "

Peluncuran lulusan juga memberi Anda pengguna terampil di dalam organisasi. Ya, Anda harus mengajari keenam pengembang aplikasi cara menggunakan sistem, tetapi mereka mempelajarinya, dan mereka setuju dengan itu; sekarang saatnya untuk meluncurkan sistem ke tim CSS, Anda memiliki enam ahli in-house lebih dari yang Anda lakukan tiga bulan lalu. Anda bahkan mungkin sudah bertobat pada saat ini; seorang pengembang yang pantatnya diselamatkan oleh kemampuan untuk segera membatalkan perubahan yang merusak mungkin adalah penginjil terbaik Anda ke tim CSS.

Sunting 1: jika Anda memutuskan untuk pergi rute ini, backstop murah sebagai chip menambahkan tripwire di atas, setidaknya pada kotak produksi. Dengan begitu, jika Things Break tetapi VCS mengatakan itu bukan tanggung jawabnya saat ini, Anda dapat dengan cepat mengidentifikasi apa yang telah berubah, yang keduanya mempercepat perbaikan dan menyarankan kandidat Anda berikutnya untuk kontrol versi.

MadHatter
sumber
1
IMHO lebih baik memakai sepatu bot dan semuanya dan versi semuanya. Akan sering kembali menggigit Anda jika tidak. misalnya saya dulu tidak memeriksa perpustakaan pihak ke-3, tapi sekarang saya lakukan. Alasannya adalah, karena ketergantungannya lebih baik untuk bisa mendapatkan seluruh sistem dari kontrol versi daripada mencoba untuk menyatukan semuanya dan membuatnya bekerja. Jika Anda tidak melakukan ini, Anda harus menyimpan salinan bit yang kompatibel dan mendokumentasikan apa yang tergantung pada apa. Dengan VC cukup periksa semuanya dan itu akan bekerja ketika Anda memeriksa semuanya. Dapatkan yang saya maksud?
Matt
Hei, aku juga; baca bit yang mengatakan "Saya setuju bahwa praktik terbaik adalah mengontrol versi segalanya". Tetapi dalam edit 1 OP secara khusus meminta strategi alternatif ke yang terbaik, dan ini sangat baik kedua, afaict.
MadHatter
Maaf kawan, saya salah membaca paragraf itu sebagai "itu tidak praktis" ketika dikatakan "jika itu tidak praktis ..." jadi Anda benar itu alternatif.
Matt
Ini memang alternatif yang layak. Terutama dengan pola pikir perusahaan 'Buktikan sebelum kita berkomitmen penuh untuk itu'.
DTest
2

Versi mengontrol segalanya. Tidak ada gunanya memiliki file HTML di bawah kontrol versi dan kemudian memiliki situs yang benar-benar kacau karena perubahan CSS yang tidak dikontrol, dan karenanya tidak dapat dengan mudah dibalik.

Jebakan: Saya pribadi belum menemukan apa pun selama penggunaan kontrol versi yang diakui cukup terbatas.

Penerapan: Saat ini saya menggunakan subversi yang dihosting di kotak Windows, baik di kantor maupun di rumah. Windows hanya karena itulah yang tersedia. Kalau tidak, bisa saja dengan mudah OS lain. Kunci bagi pengguna non-teknologi i untuk memberi mereka alat berbasis GUI sederhana untuk menangani impor, ekspor, komit, beda, dll. Alat apa yang digunakan akan sedikit bergantung pada sistem OS dan VCS yang digunakan.

Gunakan: Ketika saya membuat perubahan kode saya sering menguji dan melakukan. Ini memungkinkan saya untuk kembali sejauh yang diperlukan ketika saya gagal. Plus, dengan membandingkan berbagai revisi dan menyalin bagian dari kode saya tidak harus kehilangan setiap perubahan hanya karena saya perlu kembali ke versi sebelumnya untuk memperbaiki beberapa hal di bagian lain dari kode.

Manfaat tambahan: Anda dapat memberikan akses ke repositori sumber melalui VPN atau koneksi aman, memungkinkan pengguna untuk bekerja dari rumah atau di tempat lain. misalnya saya mungkin mendapatkan ide di rumah dan mengedit kode kerja saya di sana dan kemudian, sebelum saya kehilangan pikiran.

John Gardeniers
sumber
2

Versi segalanya.

Penempatan tergantung pada seberapa banyak Anda harus "menyesuaikan" untuk masing-masing situs ini. Jika mereka identik kecuali untuk satu atau dua file konfigurasi, Anda bisa memeriksa salinan kode untuk mereka, dan membuat perubahan kecil. Jika diperlukan, jalankan perintah pembaruan kontrol versi untuk masing-masing klien.

Jika Anda menggunakan model distribusi "checkout langsung ke situs pelanggan", Anda harus memastikan bahwa server Anda mengecualikan akses ke direktori kontrol versi sehingga orang tidak dapat menjelajah ke http://example.com/. git / dan intip ke internal Anda. Juga, saya pasti akan memiliki virtualhost pengujian dan produksi untuk setiap klien untuk memastikan bahwa pembaruan situs tidak menjadi berantakan. Terutama jika Anda membuat perubahan khusus pada file klien individu, maka Anda harus menangani konflik sebelum perubahan ditayangkan. Dalam hal ini Anda akan checkout / memperbarui host virtual pengujian, dan ketika semuanya berfungsi dengan baik, Anda akan menyalin virtual host tes ke host virtual produksi.

DerfK
sumber
sayangnya, itu harus diatur dengan setiap situs menjadi 'custom' untuk memungkinkan kemungkinan penyesuaian (bahkan jika tidak ada saat ini)
DTest
@Dest ini masih bisa dilakukan, itu hanya berarti lebih banyak pekerjaan untuk lebih banyak konflik, tergantung pada sifat kustomisasi. Tentu saja, jika Anda melakukan BANYAK penyesuaian, harus berurusan dengan konflik mungkin lebih baik daripada lupa bahwa Anda mengubah index.php untuk klien dan menggantinya dengan index.php baru yang tidak memiliki fitur khusus lagi
DerfK
@Dest juga, saya akan kedua saran "kontrol versi terdistribusi" untuk kasus ini. Anda benar-benar dapat melacak perubahan kustom yang Anda buat untuk klien dan memeriksanya ke repositori "pribadi" klien, lalu menarik perubahan dari repositori "sentral" (hanya tidak pernah mendorong perubahan kustom klien kembali dari klien ke repositori pusat)
DerfK
0

Semua yang dikatakan orang tentang versi apa yang baik.

Jika Anda memutuskan untuk menggunakan subversi, saya sarankan mencoba tumpukan Bitnami Trac; http://bitnami.org/stack/trac

Ini menyederhanakan pengaturan subversi untuk Anda, dilengkapi dengan sistem tiket (yang dapat Anda pilih untuk digunakan pada tahap ini atau tidak) untuk melacak perubahan & bug, dan wiki yang dapat Anda gunakan untuk mendokumentasikan bagaimana Anda ingin pengembang Anda menggunakan sistem.

Berikan semua pengembang Windows Anda TortoiseSVN. Ajarkan semua orang beberapa dasar-dasar baris perintah svn.

Pada akhirnya alat ini kurang penting daripada pola pikir yang Anda butuhkan untuk ditanamkan pada pengembang Anda. Mudah-mudahan mereka akan segera melihat bahwa kontrol versi adalah A Good Thing karena menghentikan mereka kehilangan pekerjaan dan memungkinkan mereka untuk kembali dari jalan buntu yang membawa mereka ke negara yang dikenal baik. Manfaatnya melebihi biaya overhead (sedikit).

nick3216
sumber