2012-02-29 16 views
21

Yakın zamanda üzerinde çalıştığımız her hikaye için özellik dallarını kullanmaya geçtik. Bunlar mümkün olduğunca bağımsız ve proje yöneticimiz hangi öykülerin bir sürüm oluşturduğuna karar veriyor. Bu, hikayelerin başlangıçta üretime gireceği kesin düzeni bildiğimiz anlamına gelir.Özellik dalları ile çalışırken Flyway nasıl kullanılır

Flyway'de bununla ilgili standart bir yol var mı? Üretim veritabanındaki değişimin nasıl doğrusal olacağını tartışan SSS bölümünü okudum. Ancak, ekip üyelerinin, özellik dalında çalışırken, geçiş numaralarının hangi sürüm numaralarına verileceğine nasıl karar vereceğinden emin değilim. Ayrıca, entegrasyon şubemize ve sürümden önce master'a geçiş yaptığımızda geçiş dosyalarını manuel olarak yeniden adlandırmamız gerekir.

Bulunan birden fazla göç sürümü 'xyz' ile: Burada

(Suçlular: SQL ...) Eğer alacak kadar

+0

"Sürüm numaralarınız" için tarih ve zaman damgalarını kullanabilirsiniz. Bunu basitleştirmek için muhtemelen bir çeşit komut dosyası desteğine sahip olmanız gerekir. –

+1

Açıkça, tüm taşıma işlemlerini bir kerede uygulamaya çalışırken çakışmalarınız olabilir. Kaynak kodda da çakışma olabilir. Bu nedenle, sürüm için hazırlamaya başladığınızda, tüm bu şeyleri çözmenin bir parçası olarak geçişlerinizi yeniden adlandırın. Bakınız: http://stackoverflow.com/questions/888414/git-checkout-older-revision-of-a-file-under-a-new-name –

cevap

19

Aynı sürüm numarasına sahip göç scrtipts olamaz önerdiğim bir geçici çözüm: Birden çok geliştirici aynı sürümde çalışıyor, 1.0 deyin ama farklı özellikler. Her soruna, FOO-16 gibi ids ekleyen bir sorun izleyici kullanıyorsunuzdur. Bir geliştirici bu konuda çalışırken, geçiş komut dosyasına V1.0.16__my_greatest_feature.sql adı verilir. Bu şekilde (her özellik/dalın kendi sorunu olduğu varsayılarak) hiçbir çarpışma yoktur.

Ayrıca, veritabanı geçiş komut dosyalarının birbirinden bağımsız olduğunu ve üst üste gelmediğini varsayıyorum, ancak durum böyle değilse, her şeyi kararlı bir sürümle birleştirirken sorun yaşayacaksınız.

Yani istikrarlı bir sürümde size boşlukları ile birkaç göç komut dosyaları var, örneğin: (FOO-16, FOO-27 ve FOO-101 seçildi ise) V1.0.16, V1.0.27, V1.0.101 - Flyway umursamayacak. Bir kararlı sürüm 1.0 (ör. V1.0.35) yapmayan tüm özellikler, bir sonraki büyük sürümü hedeflemek için yeniden adlandırılmalıdır (ör. V1.1.35).

+3

Bu özellik dalları farklı zamanlarda geliştirme dalına yeniden birleştirilirse ne olur? . 101 özelliği tekrar birleştirilirse ve 27'den önce uygulanırsa, 27 daha uygulayamazsınız çünkü uçma noktası daha küçük bir sayıya sahip olduğundan şikayetçi olur. – T3rm1

+1

Sipariş dışı işlemeyi etkinleştirmeniz gerekir (bkz. Https://flywaydb.org/documentation/commandline/migrate). –

15

Ben outOfOrder etkinleştirmek ve sürüm numarası Varsayılan olarak

olarak bir zaman damgası kullanmak dalları arasındaki sürüm sorunlarını aşmak için gördüğüm en iyi yolu, en çok göç çerçeveler gibi bir tamsayı ile bireysel göçler önüne tercih Aşağıdaki örnekte. Çerçeve, mevcut veritabanına henüz uygulanmayan geçişlerle karşılaştığında, veritabanında öneki bulunmayan ilk geçiş ile başlar ve bunları artan sırada uygulamaya başlar. 1.0.0.2__add_email_address_column_to_customers_table.sql

  • 1.0.0.3__add_orders_table_with_reference_to_customer_table.sql
  • herkes kodunun aynı dal üzerinde olduğunda bu harika çalışıyor 1.0.0.1__add_customers_table.sql

    • . Bununla birlikte, ekibin üyeleri kendi şubeleri üzerinde çalışmaya başladıklarında, bir önek çarpma olasılığı büyük ölçüde artar.

      Ancak, geçişlerinizi tamsayılar yerine zaman damgalarını kullanarak öneklemeyi tercih ederseniz, bir çarpışma olasılığı, dallar arasında bile, neredeyse kaybolur.Örneğin, gibi yyyyMMddHHmmssSSS göçler üzerinde bir kalıbı kullanarak artık ... gibi

      • 1.0.0.20130704144750766__add_customers_table.sql
      • 1.0.0.20130706132142244__add_email_address_column_to_customers_table.sql
      • 1.0.0.20130706151409978__add_orders_table_with_reference_to_customer_table.sql
      • bakmak

      Zaman damgası deseni, milisaniyeye kadar hassastır. Son derece hassas bir zaman damgası, önekleri okumayı zorlaştırabilirken, önekiniz ne kadar hassas olursa, o zaman bir çarpışma daha az olasıdır.

      En iyi sonuçlar için, bu yüzden takımınızın tüm üyeleri tutarlı bir biçim Ayrıca

      kullanırken bu zaman damgası oluşturmayı otomatik Flyway da tamsayı olarak zaman damgası önekleri davranır dikkat isteyeceksiniz. Bu, başlangıçta tam sayılar kullanarak Flyway ile çalışmaya başladıysanız, herhangi bir noktada zaman damgalarına geçebileceğiniz anlamına gelir. Zaman damgaları yalnızca çok büyük tamsayılar olduğundan, ilk zaman damgası önekli geçiş yalnızca son tam sayı öneki geçişten sonra uygulanacaktır.

      buradan Alınan ve biraz değiştirilmiş: http://www.jeremyjarrell.com/using-flyway-db-with-distributed-version-control/

  • 0

    bir versiyonu iyi bir fikir gibi görünüyor gibi bir zaman damgası kullanma. Gördüğüm tek sorun, ekibin dünyaya yayıldığı zamandır. Bu durumda standart olarak bir saat dilimi seçmek zorunda kalabiliriz.

    İlgili konular