Git'i farklı sunuculardan farklı kod tabanları için kullanmaya nasıl başlayabilirim?


11

Arka plan: Yakın zamanda şirketimdeki bir dizi projeyi miras aldım ve nasıl ele alındıklarına dair bazı temel sorunları çözmeye çalışıyorum. Yani, önceki geliştiriciler (artık şirkette olmayan) herhangi bir kaynak kontrolü kullanmıyorlardı, çok az dokümantasyon yapıyorlardı ve gerçekten iyi geliştirme süreçleri yoktu.

Şimdi SQL sunucuları ve diğer şeylerin mağazalarına kadar kullandığımız üçüncü taraf uygulamalar ve API'ler için oluşturulan web siteleri ve uygulamalar ve araçlardan oluşan üç sunucu değerinde projem var (geliştirme, evreleme, üretim). İlk düşüncem, değişiklik ve düzeltmeler yapılmadan önce tüm bunları Git'e almaktı, ancak bunu yapmanın en iyi yolunu bulmakta zorlanıyorum.

Daha önce birçok geliştirme, doğrudan her bir sunucunun kod tabanı arasında bir ayrım oluşturan üretim sunucularında yapıldı. Tüm farklılıkların nerede olduğu hemen belli değil - üretim tarafında geliştirme / evreleme üzerinde gerçekleştirilmeyen hata düzeltmelerinin yanı sıra geliştirme / üretime doğru ilerlememiş yeni özellikler görüyorum .

Soru: Bunları organize etmenin ve Git'e taşımamın en iyi yolu ne olurdu? Depolarımı / şubelerimi koddaki farklılıkları içerecek şekilde nasıl yapılandırabilirim?

Üretim sunucusu kodunun klonlarından sürekli gelişmeyi ve geliştirme / aşamalandırma kod tabanlarını tarihsel referans olarak tutmayı düşündüm. Yine de dev / evreleme kodu hakkında hiçbir şey bilmediğim düşünüldüğünde, bu potansiyel olarak başlamak için bir nokta olabilir mi? Her bir web sitesi, araç, komut dosyası seti vb. İçin üretim sunucularının depolarını oluşturabilir, mevcut geliştirme / hazırlama kodu için dallar oluşturabilirim ve herhangi bir yeni geliştirme, üretim sunucusunun kod tabanından dallanırdı. Bu mantıklı mı?


Peki tüm geliştiriciler başlamadan önce ayrıldı?
Ewan

Evet; birkaç yıldır bu şeyler üzerinde çalışmasına rağmen, bu belirli proje setinde sadece üç geliştiriciydi. Aniden ayrıldıkları söylendi ve geride bıraktıkları parçaları almaya başlamak için getirildim.
user9268966

" Nvie.com/posts/a-successful-git-branching-model " bir göz atın sık kullanılan bir modeldir.
Patrick Mevzek

1
@RobertHarvey Ve? Ben aynı modeli "bir adam" yazılım geliştirme (ben) üzerinde kullanıyorum ve önemli nokta ana, dev (elop), özellik-X, düzeltme-Y gibi dalları ile kurulum. Kişi ve depo sayısına bakılmaksızın çalışır.
Patrick Mevzek

2
Dediğim gibi @RobertHarvey: sıklıkla kullanıldı , açıkçası kullanım vakalarının% 100'ü için bir çözüm değil, ancak en azından hangi modeli kullanacağına karar vermeden önce okumak faydalıdır. Ve daha önce geliştiriciler vardı, bu yüzden yalnız adam her zaman yalnız olmayabilir ... :-)
Patrick Mevzek

Yanıtlar:


10

Üretim malzemelerini masteryeni bir repo dalına itin . Bundan bir developşube oluşturun ve ardından hazırlama sunucusunu onunla birleştirin. Çözülmesi gereken çatışmalarla başa çıkabilirsiniz. Bu çözüldükten sonra, başka oluşturmak feature_branchgelen developve içine geliştirme sunucusu birleştirin. Ortaya çıkan çatışmaları giderin.

Bu size üretim, evreleme ve geliştirme ortamlarınızı temsil eden 3 dal bırakır. Üretim -> master, evreleme -> develop, geliştirme -> feature_branch. Böylece tüm geliştirme yapılır feature_branchesve sadece developözellik yapıldığında, test edildiğinde ve kararlı olduğunda dalla birleştirilir . Stabil olduğu için evreleme olarak kullanılabilir. Serbest bırakmaya hazır olduğunuzda bir releasedal kesin develop, gevşek uçları bağlayın, birleştirin masterve sonra yeni üretim yapınız var.

Bu kurulumu yaptıktan sonra ilk iş emirlerinizden biri, feature_brancharkasını develop* ve ardından developtekrar birleştirmek olmalıdır master. feature_branchTest edilmemiş kod ve özellikler içerebileceğini unutmayın , bu yüzden developve daha sonra birleştirirken dikkatli olun master. Bu yapıldıktan sonra, tüm şubeler aynı kodu içermelidir ve üretim sunucusunda yapılan herhangi bir geliştirme artık geliştirme "sunucusuna" geri taşınmaktadır.

Bu modelde, her proje kendi repo'sunda olacak ve bu repo bir masterve developşubeye ek feature_branchesolarak yapılacak herhangi bir iş için olurdu .

EDIT, yorumları ele almak için: Evet, bu Gitflow.

Bu strateji (veya genel olarak Gitflow) mevcut 3 seviyeli sistemi (üretim, aşamalandırma, geliştirme) geliştirmeden üretime kadar açık bir birleşme yolu ile tutar. Kod tabanlarının bu şekilde içe aktarılması, üretimdeki statükoyu korurken dalların senkronize edilmesini de sağlar - en azından birleştirme test edilinceye kadar. Bu, birkaç hedefe ulaşır: kodu kaynak kontrolüne alır, farklı kod tabanlarını senkronize eder ve birleştirir (böylece üretimde artık hata düzeltmeleri olmaz, geliştirme yoktur) ve ileride kullanmak için güzel bir süreç sağlar (iyi tanımlanmış bir süreç) ve birçok kişi / ekip / şirket tarafından kullanılır). OP, Gitflow'un projelerini / ekiplerini / şirketini kullandığı / şirket büyüdüğü için uygun olmadığını fark ederse, o zaman '


* Başka bir özellik dalını kesmek ve belirgin yeni özellikleri kaldırmak ve o dalı içine develop(ve sonra master) birleştirmek isteyebilirsiniz . Bu, yapacağınız tüm diğer testlerin üstünde yeni özellikleri test etmenizi engeller.


1
GitFlow gibi geliyor.
Robert Harvey

1
Bu bir kargo kült cevabı. Gitflow soruda belirtilen sorunun çözülmesine nasıl yardımcı olur?
Bay Cochese

@MrCochese see my edit
mmathis

İlk başta, cevabınız sadece aradığım şey olmayan Gitflow'un bir açıklaması gibi görünüyordu, ancak düzenlemeniz eldeki soruya gerçekten cevap vermek için çok gerekli bağlamı ekledi. Gitflow ile devam etmeyeceğim çünkü durum için uygun olduğunu düşünmüyorum, ancak fikrin ve bütünlüğünün ardındaki mantığı takdir ediyorum. Daha önce bahsettiğim gibi bu bağlamı sağlamak için gelecekte yanıtlarınıza daha fazla düşünce sürecinizi eklemenizi öneririm.
user9268966

3

Ben tavsiye edeceğim stagingsizin ilk içe aktarma için en iyi temel olarak kod. Yani en yüzünden değişiklikler var productionolmayan stagingherhangi bir değişiklik olursa çok daha az nedeniyle sıcak düzeltmeleri, ama stagingdeğildir production. Aynı şekilde orada değişikliklerdir development, değil stagingherhangi bir değişiklik olursa muhtemelen çok daha az nedeniyle yeni özelliklere, ancak stagingdeğildir development.

Not sen do not istemek stagingİlk içe aktarılmasından sonra taban çizgisini olmak. Bu, değişikliklerin önceden izlenmemesi nedeniyle sadece geçici bir durumdur. Eğer varsa Şube operasyonları çok daha sorunsuz ekleyerek değişiklikleri yerine izale. İlk içe aktarmanızdan sonra, ileride ihtiyaçlarınıza en uygun dallanma modeline geçin.

Bu nedenle, stagingkodunuzu bir stagingşubeye kontrol edin , ardından dalınızı git checkout -b master stagingoluşturmak için a yapın masterve orada üretim kodunuzu kontrol edin. Sonra dalınızı git checkout -b development stagingoluşturmak için a yapın developmentve geliştirme kodunuzu orada kontrol edin.

Şimdi kontrol developmentşube ve birleştirme master içine o. Bu, mastergerçekte üretimde olanların bir kaydını tutarken büyük olasılıkla birleştirme çatışmalarını çözmenize izin verecektir . developmentartık her ortamdaki tüm değişiklikleri içeriyor. Artık size en uygun dallanma modeline geçebilirsiniz.


2

Geçmişe sahip olmak iyi bir fikirdir. Depoyu (veya her ürün için bir tane) en kararlı ortamdan yaratacağım. Diğerleri için dallar veya farklar oluşturun.

Yüksek düzeyde:

  1. Yeni bir repo oluştur
  2. Üretime dayalı çalışan bir kopyadan: tümünü ekleyin, taahhüt edin ve aktarın
  3. Yeni bir dizine çıkış yöneticisi
  4. Her ek ortam için XYZ
    1. Şube oluştur Archive-XYZ
    2. Her şeyi XYZkaynakla değiştir (.git hariç)
    3. hepsini ekle, taahhüt et ve it

Alternatif olarak, git diff > XYZ.diffgerçekte taahhüt etmek ve itmek yerine bunun değerinden kuşkulanıyorsanız ve farkları arşivleyin.

Her iki durumda da, her bir proje için tek bir başlangıç ​​noktasına yerleşmek üzere kullanabileceğiniz her ortamda çalıştırdığınız kodu kolayca karşılaştırabileceğiniz bir durumda sonlandırmalısınız. Ve bir şey kırılırsa, teorik olarak değişikliklerinizi üç ortamdan herhangi biriyle karşılaştırabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.