Not: Sorum belirli sorunuma odaklandı (Liferay'ı içeriyor), ancak umarım git üzerinde aynı projenin çeşitli sürümlerini tutması gereken herkes için yararlı olabilir.
Liferay Portal için birçok eklenti yazan bir şirkette çalışıyorum . Bu eklentiler (portletler, temalar vb.) Genellikle yeniden kullanılabilir ve elbette portalın yeni sürümleri için güncellenmelidir.
Ancak, taşınamayacak kadar var bize, demek Liferay yeni sürümüne portlet izin olağandır ve önceki sürümü korumak için. Ayrıca, sık sık bazı istemciler için çok özel özelleştirmeler oluşturmak zorundayız.
Bu gereklilikler işimizi karmaşıklaştırıyor, ancak neyse ki bazı basitleştirmeler yapabiliriz. Örneğin, eklentiler bir seferde yalnızca bir programcı tarafından sık sık güncellenir. Bir eklentiye aynı anda iki veya daha fazla özelliğin eklenmesi çok nadirdir.
Şimdi Gitorious'a göç ediyoruz . Böyle bir senaryo için bir dallanma modeli tasarlamaya çalışıyoruz.
Benim modelim
Ne önerdi:
- Her eklenti bir proje içinde Gitorious'da kendi deposuna sahip olacaktı. Örneğin, yavru kedileri sergilemek için bir portletin proje
kittens-portlet
içinde bir deposu olacaktırliferay-portlets
. - Yeni bir eklenti oluştururken, Liferay sürümüne göre adlandırılmış bir dalda oluşturun (örneğin,
lf5.2
). - Eklenti üzerinde her güncelleme yapıldığında, güncelleme onaylanır ve üretimde dağıtılır, eklentiyi bir sürümle etiketleyin (örneğin
lf5.2v1
,lf5.2v2
vb.) * - Bir eklentinin Liferay'ın yeni bir sürümüne her taşınması gerektiğinde, en son sürümü dallıyoruz (örneğin, dalı yaratıyoruz
lf6.0
). - Üretime girdikten sonra, yeni şubenin başı gibi bir etiket alacak
lf6.0v1
. - Bir eklentiyi istemciye özgü bir şekilde özelleştirmek istediğimizde, istemcinin adıyla bir şube oluştururuz (örneğin,
lf5.2clientcorp
müşterimiz "ClientCorp Inc." için bir şube oluştururuz )
Bu alışılmadık bir model: master
birleşmeyen ve çok fazla şubesi olmayacaktı. Ben böyle bir model ile bir havuz gibi görüneceğini varsayalım :
Bir arkadaş bu sistemi oldukça karmaşık ve hataya açık buldu. Yönetmek ve disiplin talep etmek için hala zor bulduğum mükemmel ve popüler Vincent Driessen modelini önerdi . Elbette harika (ve test edildi!) Ama durumumuz için çok karmaşık görünüyor.
Arkadaşımın modeli
Sonra başka bir model önerdi: Liferay versiyonundaki her eklenti için bir havuzumuz olurdu (böylece her biri bir dal ve bir dalı olan bir kittens-lf5.2-portlet
ve sonra a oluşturmaya başlayacağız kittens-lf6.0-portlet
) . Her zaman dağıtım için hazır olacaktır. (Ya da tersi olması, olabilir ve önerdiği gibi, Steve Losh ).master
develop
master
master
stable
Bu çok basit, ama bu sistemi beğenmedim:
- bir projede çok fazla depoya neden olabilir ve bu da Gitorious'u taramayı zorlaştırır.
- Proje dizininin adı önemlidir. Birisi deposu bir
kittens-lf6.0-portlet
dizine kopyalar ve WAR'u karınca (her zamanki gibi) ile üretirse, WAR adı da olacaktırkittens-lf6.0-portlet
. Bu portletin eski sürümleri (kittens-portlet
örneğin adlandırılmış ), yükseltilmiş bir portaldaki farklı (ve muhtemelen eksik) portletler olarak kabul edilir. Biraz bakım bundan kaçınabilir ama kaçınmayı tercih ederim. - Aynı eklentinin farklı sürümleri ayrı tutulur. Kalbimi kırıyorum :(
kittens-lf6.0-portlet
bence bir depo için çirkin bir isim.
Son iki noktanın - ki bunlar da daha öznel olan iki noktayı - isteksizliğimin ana nedeni olduğunu düşünüyorum. Bununla birlikte, dört itiraz da geçerlidir.
OTOH, kendi teklifim kendime garip geliyor ve üzerinde gizli böcek olup olmadığını merak ediyorum. OT3rdH git o kadar güçlü ve esnek ki, olasılıklarını keşfetmekten utanmamam gerektiğini düşünüyorum.
Yani soruyorum:
- En iyi model ne olurdu? Teklifim mi? Arkadaşımın modeli? Şimdi geleneksel Vincent Driessen sistemi?
- Başka hangi dallanma modelini önerirsiniz?
- Modelimin kötü olduğunu düşünüyorsanız neden böyle düşünüyorsunuz? Dezavantajların ve kör noktaların ne olduğunu öğrenmek isterim.
* Aslında, taahhüt gibi bir sürümü ile etiketlemek tercih ederdim v1
ama görünüşe göre git bir etiket şube kapsamı içinde değildir - yani, ben 1 v1
etiketi lf5.2
ve başka bir etiket olamazdı lf6.0
- bu yüzden isim vermek zorunda dalı. BTW doğru mu?