Bagaimana cara saya mulai menggunakan Git untuk basis kode yang berbeda dari server yang berbeda?

11

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?

pengguna9268966
sumber
jadi semua pengembang pergi sebelum Anda mulai?
Ewan
Iya; itu hanya tiga pengembang pada set proyek khusus ini, meskipun mereka telah mengerjakan hal ini selama beberapa tahun. Saya diberitahu bahwa mereka pergi dengan tiba-tiba dan saya dibawa untuk mulai mengambil bagian dari apa yang mereka tinggalkan.
user9268966
Lihatlah " nvie.com/posts/a-successful-git-branching-model " itu adalah model yang sering digunakan.
Patrick Mevzek
1
@RobertHarvey Dan? Saya menggunakan model yang sama pada pengembangan perangkat lunak "satu orang" (saya), dan yang penting adalah pengaturan dengan cabang-cabang seperti: master, dev (elop), fitur-X, hotfix-Y. Ini bekerja terlepas dari jumlah orang dan repositori.
Patrick Mevzek
2
@ RobertTarvey seperti yang saya katakan: sering digunakan , jelas bukan solusi untuk 100% kasus penggunaan, tetapi setidaknya berguna untuk membaca sebelum memutuskan model mana yang akan digunakan. Dan ada pengembang sebelumnya, jadi orang yang sendirian mungkin tidak selalu sendirian ... :-)
Patrick Mevzek

Jawaban:

10

Dorong barang-barang produksi ke mastercabang repo baru. Buat developcabang dari itu, dan kemudian gabungkan server pementasan ke dalamnya. Anda mungkin berakhir dengan konflik yang perlu diselesaikan. Setelah itu diselesaikan, buat yang lain feature_branchdari developdan 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 pada feature_branchesdan hanya digabung ke developcabang ketika fitur dilakukan, diuji, dan stabil. Karena stabil, itu dapat digunakan sebagai pementasan. Potong releasecabang dari developsaat Anda siap untuk melepaskan, ikat ujung yang longgar, gabungkan menjadi master, dan kemudian Anda memiliki membangun produksi baru Anda.

Salah satu pesanan bisnis pertama Anda setelah menyiapkan ini adalah menggabungkan feature_branchkembali menjadi develop*, dan kemudian developkembali ke master. Ingatlah bahwa feature_branchmungkin berisi kode yang belum diuji dan fitur, sehingga latihan hati-hati ketika penggabungan ke dalam developdan kemudian master. 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 masterdan develop, ditambah feature_branchesuntuk 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 ke master). Ini membuat Anda tidak perlu menguji fitur baru di atas semua tes lain yang akan Anda lakukan.

mmathis
sumber
1
Kedengarannya seperti GitFlow.
Robert Harvey
1
Ini sedikit jawaban kultus kargo. Bagaimana gitflow secara khusus membantu memecahkan masalah yang disebutkan dalam pertanyaan?
Mr Cochese
@MrCochese lihat hasil edit saya
mmathis
Pada awalnya, jawaban Anda sepertinya hanya sebuah penjelasan tentang Gitflow yang bukan yang saya cari, tetapi hasil edit Anda menambahkan konteks yang sangat dibutuhkan untuk benar-benar menjawab pertanyaan yang ada. Saya tidak akan menggunakan Gitflow karena saya pikir itu tidak sesuai untuk situasi tersebut, namun saya menghargai logika di balik ide dan ketelitiannya. Saya sarankan menambahkan lebih banyak proses pemikiran Anda ke jawaban di masa depan untuk memberikan konteks itu seperti yang saya sebutkan sebelumnya.
user9268966
3

Saya akan merekomendasikan stagingkode ini sebagai baseline terbaik untuk impor awal Anda. Itu karena ada perubahan productionyang tidak ada staging, karena perbaikan panas, tetapi jauh lebih sedikit jika ada perubahan stagingyang tidak ada production. Demikian juga ada perubahan developmentyang tidak ada dalam staging, karena fitur baru, tetapi kemungkinan jauh lebih sedikit jika ada perubahan stagingyang tidak masuk development.

Catatan, Anda tidak ingin stagingmenjadi 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 stagingkode Anda ke stagingcabang, lalu lakukan git checkout -b master staginguntuk membuat mastercabang Anda , dan periksa kode produksi Anda di sana. Kemudian lakukan git checkout -b development staginguntuk membuat developmentcabang Anda , dan periksa kode pengembangan Anda ke sana.

Sekarang periksa developmentcabang Anda dan bergabung master ke dalamnya. Ini akan memungkinkan Anda memecahkan kemungkinan besar jumlah konflik penggabungan sambil tetap mempertahankan mastersebagai catatan apa yang sebenarnya ada di produksi. developmentsekarang berisi semua perubahan dari setiap lingkungan. Sekarang Anda dapat beralih ke model percabangan apa pun yang paling cocok untuk Anda.

Karl Bielefeldt
sumber
2

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:

  1. Buat repo baru
  2. Dari copy pekerjaan berbasis produksi: tambahkan semua, komit, dan dorong
  3. Master checkout ke direktori baru
  4. Untuk setiap lingkungan tambahan XYZ
    1. Buat cabang Archive-XYZ
    2. Ganti semuanya dengan XYZsumber (kecuali. Git)
    3. tambahkan semua, komit, dan dorong

Atau, jika Anda ragu dengan nilai ini, git diff > XYZ.diffalih-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.

svidgen
sumber