Latar belakang: Saya baru-baru ini mewarisi serangkaian proyek di perusahaan saya dan saya sedang mencoba untuk menyelesaikan beberapa masalah mendasar dengan cara mereka ditangani. Yaitu, pengembang sebelumnya (yang tidak lagi bersama perusahaan) tidak menggunakan segala bentuk kontrol sumber, membuat sedikit dokumentasi, dan tidak benar-benar memiliki proses pengembangan yang baik.
Jadi sekarang saya punya tiga server proyek (pengembangan, pementasan, produksi) yang sebagian besar terdiri dari situs web dan aplikasi serta alat yang dibuat untuk aplikasi pihak ketiga dan API yang kami gunakan, hingga ke penyimpanan skrip SQL dan hal lainnya. Pikiran pertama saya adalah memasukkan semua ini ke Git sebelum perubahan dan perbaikan dilakukan, tetapi saya mengalami kesulitan mencari cara terbaik untuk melakukannya.
Banyak pengembangan sebelumnya dilakukan secara langsung pada server produksi, yang telah menciptakan kesenjangan antara basis kode masing-masing server. Tidak segera jelas di mana letak perbedaannya - Saya melihat perbaikan bug di sisi produksi yang tidak terbawa pada pengembangan / pementasan, serta fitur baru pada pengembangan yang belum dipindahkan ke arah pementasan / produksi .
Pertanyaan: Apa cara terbaik bagi saya untuk mengatur dan memindahkan ini ke Git? Bagaimana saya menyusun repo / cabang saya untuk mengakomodasi perbedaan dalam kode?
Saya telah mempertimbangkan melanjutkan pengembangan dari klon kode server produksi dan menjaga basis kode pengembangan / pementasan sebagai referensi historis. Apakah ini berpotensi menjadi titik untuk memulai, mengingat saya tidak tahu apa-apa tentang kode dev / staging? Saya cukup membuat repo dari server produksi untuk setiap situs web, alat, kumpulan skrip, dll., Membuat cabang untuk kode dev / staging yang ada, dan setiap pengembangan baru akan bercabang dari basis kode server produksi. Apakah ini masuk akal?
sumber
Jawaban:
Dorong barang-barang produksi ke
master
cabang repo baru. Buatdevelop
cabang dari itu, dan kemudian gabungkan server pementasan ke dalamnya. Anda mungkin berakhir dengan konflik yang perlu diselesaikan. Setelah itu diselesaikan, buat yang lainfeature_branch
daridevelop
dan gabungkan server pengembangan ke dalamnya. Atasi setiap konflik yang muncul.Ini memberi Anda 3 cabang, yang mewakili lingkungan produksi, pementasan, dan pengembangan Anda. Produksi ->
master
, pementasan ->develop
, pengembangan ->feature_branch
. Semua pengembangan dengan demikian dilakukan padafeature_branches
dan hanya digabung kedevelop
cabang ketika fitur dilakukan, diuji, dan stabil. Karena stabil, itu dapat digunakan sebagai pementasan. Potongrelease
cabang daridevelop
saat Anda siap untuk melepaskan, ikat ujung yang longgar, gabungkan menjadimaster
, dan kemudian Anda memiliki membangun produksi baru Anda.Salah satu pesanan bisnis pertama Anda setelah menyiapkan ini adalah menggabungkan
feature_branch
kembali menjadidevelop
*, dan kemudiandevelop
kembali kemaster
. Ingatlah bahwafeature_branch
mungkin berisi kode yang belum diuji dan fitur, sehingga latihan hati-hati ketika penggabungan ke dalamdevelop
dan kemudianmaster
. Setelah selesai, semua cabang harus berisi kode yang sama, dan setiap pengembangan yang dilakukan pada server produksi sekarang porting kembali ke pengembangan "server".Dalam model ini, setiap proyek akan berada dalam repo sendiri, dan repo itu akan memiliki cabang
master
dandevelop
, ditambahfeature_branches
untuk setiap pekerjaan yang dilakukan.EDIT, untuk menjawab komentar: Ya, ini Gitflow.
Strategi ini (atau Gitflow secara umum) menjaga sistem 3-level yang ada (produksi, pementasan, pengembangan) dengan jalur penggabungan yang jelas dari pengembangan hingga produksi. Mengimpor basis kode dengan cara ini juga memungkinkan cabang disinkronkan sambil mempertahankan status quo dalam produksi - setidaknya, hingga penggabungan dapat diuji. Ini mencapai beberapa tujuan: mendapatkan kode dalam kontrol sumber, mendapatkan basis kode yang berbeda disinkronkan dan digabung (sehingga tidak ada lagi perbaikan bug dalam produksi tetapi tidak pengembangan), dan menyediakan proses yang bagus untuk digunakan maju (proses yang didefinisikan dengan baik dan digunakan oleh banyak orang / tim / perusahaan). Jika OP menemukan bahwa Gitflow tidak cocok untuk proyek / tim / perusahaan saat ia menggunakannya / perusahaan tumbuh, maka itu '
* Anda mungkin ingin memotong cabang fitur lain dan menghapus setiap fitur baru yang jelas, dan menggabungkan bahwa cabang ke
develop
(dan kemudian kemaster
). Ini membuat Anda tidak perlu menguji fitur baru di atas semua tes lain yang akan Anda lakukan.sumber
Saya akan merekomendasikan
staging
kode ini sebagai baseline terbaik untuk impor awal Anda. Itu karena ada perubahanproduction
yang tidak adastaging
, karena perbaikan panas, tetapi jauh lebih sedikit jika ada perubahanstaging
yang tidak adaproduction
. Demikian juga ada perubahandevelopment
yang tidak ada dalamstaging
, karena fitur baru, tetapi kemungkinan jauh lebih sedikit jika ada perubahanstaging
yang tidak masukdevelopment
.Catatan, Anda tidak ingin
staging
menjadi baseline setelah impor awal Anda. Ini hanya situasi sementara karena perubahan yang tidak dilacak sebelumnya. Operasi cabang berjalan lebih lancar jika Anda menambahkan perubahan daripada menghapusnya. Setelah impor awal Anda, beralihlah ke model percabangan apa pun yang paling sesuai dengan kebutuhan Anda.Jadi, periksa
staging
kode Anda kestaging
cabang, lalu lakukangit checkout -b master staging
untuk membuatmaster
cabang Anda , dan periksa kode produksi Anda di sana. Kemudian lakukangit checkout -b development staging
untuk membuatdevelopment
cabang Anda , dan periksa kode pengembangan Anda ke sana.Sekarang periksa
development
cabang Anda dan bergabungmaster
ke dalamnya. Ini akan memungkinkan Anda memecahkan kemungkinan besar jumlah konflik penggabungan sambil tetap mempertahankanmaster
sebagai catatan apa yang sebenarnya ada di produksi.development
sekarang berisi semua perubahan dari setiap lingkungan. Sekarang Anda dapat beralih ke model percabangan apa pun yang paling cocok untuk Anda.sumber
Ide yang bagus untuk memiliki sejarah. Saya akan membuat repositori (atau satu untuk setiap produk) dari lingkungan yang paling stabil. Buat cabang atau beda untuk yang lain.
Pada level tinggi:
XYZ
Archive-XYZ
XYZ
sumber (kecuali. Git)Atau, jika Anda ragu dengan nilai ini,
git diff > XYZ.diff
alih-alih benar-benar melakukan dan mendorong, dan arsipkan perbedaannya.Either way, Anda harus berakhir dalam keadaan di mana Anda dapat dengan mudah membandingkan kode yang Anda jalankan di setiap lingkungan, yang dapat Anda gunakan untuk menyelesaikan satu titik awal untuk setiap proyek. Dan, jika sesuatu rusak, Anda secara teoritis dapat membandingkan perubahan Anda dengan salah satu dari tiga lingkungan tersebut.
sumber