Bu zor bir sorun ama birçok insanın karşılaştığı bir problem. Gitflow kurulumunu başlangıç noktası olarak kullanmayı tercih ederim.
Geliştirme ->
Master üzerinde çalışılan yeni şeyler -> Teste ihtiyaç duyan bitmiş ürünler Üretim -> Üretime yayınlanmış olan şeyler.
Küçük (daha kısa) özelliklerde, geliştirmeden bir dal yaratırım, oradaki işi yapar, sonra da dalı gelişime geri birleştiririm.
Başlıca (uzun vadeli) özelliklerde gelişimden bir dal oluşturur, o daldan daha küçük dallar oluşturur, sonra ilk dalla birleşirim. Başlıca özellik tamamlandıktan sonra geliştirme dalına geri döner.
Düzenli aralıklarla (projeye bağlı olarak) gelişimi tekrar master ile birleştiriyorum ve bir test döngüsü başlıyor. Testte herhangi bir düzeltme ortaya çıkarsa, ana dalda yapılırlar (alt dal sonra birleştirilir). Ve test sırasında ana dalda geliştirme devam edebilir.
Herhangi bir zamanda usta gelişimle birleştirilmeli ve kalkınma uzun vadeli alt dallarından herhangi biriyle birleştirilmelidir.
usta her zaman (teoride) üretime hazır olmalıdır. Kalkınma her zaman (teoride) üretime hazır olmalıdır. Test etmenin test etmesi için sağlam bir özellik kümesi sağlamanın tek nedeni budur.
Hazır olduğunda, test edilen bir master taahhüdü üretimle birleştirilir ve üretimde dağıtım bu branştan gerçekleşir. Acil bir durumda yapılması gereken HOTFIX'ler, Master'da birleştirilmeye gerek kalmadan Üretim branşında gerçekleşebilir (test edilmemiş birçok değişiklik olabilir).
Normal Ağacım benziyor
LongTerm -> Development -> Master -> Production
LongTerm <- Development | |
| Development -> Master |
LongTerm <- Development -> Master |
Development <- Master |
Master -> Production
Genel kuralım, hiçbir değişikliğin birkaç saatten fazla sürmemesi gerekir. Eğer öyleyse, daha küçük değişikliklere yapılması gerekir. Büyük bir özellikse (UI yeniden yazma gibi), uzun vadede devam eder, böylece normal gelişim aynı anda devam edebilir. LongTerm şubeleri normalde sadece yerel şubeler, Geliştirme, Master ve Üretim ise uzak şubelerdir. Alt dallar da yalnızca yereldir. Bu, uzun vadeli özellik kümesinde git'in kullanışlılığını kaybetmeden depoyu başkaları için temiz tutar.
Bununla birlikte, uzun vadeli bir şubenin varlığının nadir bir şey olduğunu belirtmek isterim. Normalde tüm işlerim geliştiriliyor. Sadece normal geliştirici şeyler üzerinde çalışabilmem gereken kadar uzun sürecek bir özellik (set) olduğunda, LongTerm dalını kullanırım. Eğer birlikte olması gereken bir takım değişiklikler varsa, o zaman hepsi bitene kadar ustalaşmak için birleşmem.