Kontrol versi situs web: file front-end dev / produksi

9

Saya mencoba memikirkan cara yang lebih baik untuk mengontrol versi proyek situs web kami. Ingatlah bahwa saya hanya seorang pengguna front-end jadi saya tidak memiliki pengetahuan mendalam tentang VCS.

Alur kerja berubah, dan kebiasaan kontrol versi sebelumnya menjadi usang. Masalah utama adalah ada 2 array file front-end untuk setiap situs web.

Lingkungan dev (lebih sedikit file, js tidak terkompresi, gambar, dll). Lingkungan build, "gulpified" (semuanya dikompresi dan tidak dapat dibaca oleh manusia).

Tetapi Anda tidak dapat menjual situs web dengan file sumbernya. Yah, rasanya tidak beres.

Ada solusi untuk memiliki 2 repo: satu build, satu dev, dengan tegukan mengirim file dev ke direktori build. Tapi ini merepotkan untuk dipertahankan, dengan perusahaan kecil, saya rasa itu tidak bagus. Ini menciptakan banyak repo, dan orang harus mengelola dengan beberapa repo, kadang-kadang bahkan dengan satu repo svn, timbul masalah.

Jadi ada juga solusi memiliki 1 repo: file sumber dan file prod dalam svn yang sama. Tetapi kemudian diperlukan untuk menghapus file sumber ketika situs web beralih dari server dev lokal ke server produksi (jadi ada file yang berbeda dalam satu repositori, berdasarkan lokasi, dev, atau produksi ..). Dari apa yang saya dengar, itu tidak baik

Apa cara yang benar untuk mengelola alur kerja front-end tegukan sehubungan dengan sistem kontrol versi?

Antonin Cezard
sumber

Jawaban:

13

Salah satu aturan dasar kontrol sumber adalah Anda hanya perlu memasukkan artefak tertulis manual ke dalam repo (file sumber asli), semua yang dapat "dikompilasi" atau "dihasilkan" tidak perlu disimpan di sana, karena akan menghasilkan redundansi . Satu dapat (opsional) menyimpan output menengah / bagian dari proses build dalam repo (kadang-kadang juga disebut artefak), ketika langkah-langkah untuk mereproduksi mereka tidak sepenuhnya otomatis, atau untuk tujuan caching, ketika langkah-langkah membangun untuk mereproduksi output lambat .

Jadi jika Anda memiliki proses sepenuhnya otomatis untuk menghasilkan file produksi dari file sumber dev Anda, Anda hanya perlu menempatkan file dev ke dalam kontrol sumber (bersama dengan skrip untuk membuat file produksi). Jika tidak, buat proses seperti itu. Pastikan tidak ada yang harus mengutak-atik file produksi secara manual setelah dihasilkan dari sumber. Jika Anda ingin menggunakan "langsung" dari VCS Anda, pastikan Anda memiliki skrip penyebaran yang menarik file sumber dev dari kontrol sumber, lakukan "tegukan" dan transfer file yang dihasilkan ke produksi dalam satu langkah.

Tentu saja, jika Anda ingin menggunakan kontrol sumber juga sebagai "cadangan orang miskin" atau sebagai cache untuk file produksi Anda, Anda dapat mengatur repo kedua untuk tujuan ini dan meletakkan salinan struktur file produksi setelah generasi. Repo ini tidak akan berfungsi untuk pengembangan, dan setelah diatur, Anda tidak harus memeliharanya secara manual. Jadi pastikan tidak ada langkah manual yang terlibat untuk membuat cadangan ke dalam "prod repo" ini - sertakan langkah-langkah yang diperlukan ke dalam skrip deploy yang membuat cadangan secara otomatis. Pikirkan tentang menambahkan skrip cadangan terpisah jika Anda tidak dapat melarang perubahan manual untuk produksi setelah penerapan. Dengan begitu, Anda dapat menjaga proses tetap terpelihara bahkan jika Anda memiliki sumber daya yang terbatas.

Dan ya, ini harus menjadi repo kedua yang sangat terpisah, karena ia memiliki tujuan yang sama sekali berbeda dan siklus hidup yang berbeda dari repo dev Anda. Anda menggunakannya hanya untuk cadangan, bukan untuk kontrol sumber, yang merupakan proses yang berbeda.

Doc Brown
sumber
apakah itu berarti ketika situs pergi ke produksi, diperlukan untuk membangunnya dari server produksi? atau mungkin hanya host yang membangun (yang tidak diversi waktu itu)
Antonin Cezard
@topleft: Dari "server produksi"? Tidak harus, kode sumber ada di dalam repo, Anda dapat membangunnya dari mana saja di mana Anda memiliki akses ke kontrol sumber dan ke sistem file server produksi. Jadi, dimanapun Anda inginkan, dari mesin dev, dari mesin build yang dibuat-buat, atau mungkin langsung pada mesin prod. Tetapi lihat juga paragraf saya yang ditambahkan setelah Anda menulis komentar.
Doc Brown
3
Kata-kata Anda membingungkan. "Artefak" sering merujuk pada output dari kompiler atau generator, bukan input.
Daenyth
Ini tidak selalu benar: untuk kompiler bootstrap, Anda mungkin perlu meletakkan file yang dihasilkan di bawah VCS. Contoh tipikal adalah bytecode Ocaml boot/ocamlcatau file GCC melt/generated/*.cc
MELT
1
@Daenyth: AFAIK kata artefak berarti terutama secara manual diproduksi bagian dalam pengembangan perangkat lunak. Anda benar bahwa dalam beberapa konteks orang berbicara tentang "membangun artefak", karena apa yang dihasilkan kompiler secara tidak langsung merupakan hasil dari tindakan pemrograman manual.
Doc Brown