Git sürümlerini yapı numaraları olarak entegre etmek için mi?


12

Bir meslektaşım ve ben, mevcut git deposundan türetilmiş bir sürümü kod oluşturduğumuzda kodumuza entegre etmenin meselelerini / değerlerini tartışıyor / tartışıyoruz.

Değerlerin şunları içerdiğini düşünüyoruz:

  • Sürüm numarasını güncellerken insan hatası konusunda endişelenmenize gerek yok
  • Bir cihazda bulduğumuz ve türetildiği kaynak kod arasındaki izlenebilirlik

Ortaya çıkan sorunlar (bizim için) şunları içerir:

  • IDE'den türetilen yapı sistemleri (örneğin MPLABX), bu tür kancaların nereye yerleştirileceğini bulmayı zorlaştırabilir (ve sonunda oldukça sevimsiz olabilir).
  • Bunu yapı komut dosyalarına / makefiles'larına entegre etmek için daha fazla çalışma
  • Belirli bir yapım yaklaşımına bağlanma (örneğin, bir kişi XCode ve diğer MPLABX ile geliştirirse) aşağı yönlü sürprizler yaratabilir

Bu yüzden başkalarının bu tartışmaya nereden geldiğini merak ediyoruz. Tartışmanın anekdot haline gelmesi gerçekten çok kolay. Dışarıda uçtan uca otomasyonda ısrar eden, ön çalışma miktarını ve yarattığı bağlantıyı asan birçok insan var. Ve tartışmanın diğer tarafında, risklerle çalışan ve risklerle yaşayan en kolay şeyi yapan birçok başka şey var.

Hangi tarafa inmenin en iyi olduğuna dair makul bir cevap var mı?

Yanıtlar:


15

Sürüm etiketleriyle git description kullanıyoruz . Akış temel olarak:

  • üzerinde çalıştığımız sürüm için etiket oluştur (ör. v1.1.2)
  • her yapı koşusu git describe
  • gönderdiğimizde, etiket adını kullanın

git describeetiket adını, etiketten sonraki taahhütlerin sayısını ve etiketin karmasını sağlar. Örnek bir etiket şuna benzer:

v1.1.2-6-a3b27gae

Bu, geliştiricilerin karma elde etme avantajına sahiptir, bu nedenle yapılar arasında bir şey kırılırsa geliştirici değişiklikleri kolayca dağıtabilir. Ayrıca yönetilmesi aptalca basit; ekibinizin yeni bir hata düzeltme dalında etiketi oluşturup göndermesini sağlayın ve derleme sisteminiz gerisini halleder.

Karma'yı (ve yapı numarasını) çıkarırız, çünkü kullanıcıların sürüm numaralarımızı anlamasını kolaylaştırır. Bir sürümün mühendisliğini yaparken yeterli miktarda bilgi sağlarken, bunun bize her iki dünyanın en iyisini verdiğini görüyoruz.

Şu anda, bunun biraz daha karmaşık bir versiyonuna sahibiz, ancak fikir devam ediyor.


1
Hemen not: karma it describe(dizenin son bölüm) 'dir değil etiketinin CSET kimliği, ama biz tarif olsun kendisi için Changeset, karma . İnsan tarafından okunabilir formda v1.1.2-6-a3b27gae"v1.1.2-6 olarak etiketlenen, değişiklik kümesinden altı değişiklik kümesi" kısa değişiklik kümesi vardır-a3b27gae kısa "
Lazy Badger

@LazyBadger - Kesinlikle. git checkout v1.1.2Etiketin taahhüdünü kolayca veya listeleyebileceğiniz için etiketin karması daha az kullanışlıdır git rev-list v1.1.2 | head -n 1.
Mart'ta beatgammit

6

Eskiden bir SVN dükkanıydık, bu yüzden bu matematik kolaydı - yapı numarası SVN devriydi ve bu buydu. DCVS'lere geçmeye başladığımızda bunu sürdürmeye çalıştık ve birkaç nedenden dolayı başarısız olduğunu gördük.

İlk olarak, rev 69bc333bc8d8'in rev 25b0f0d1052c'den önce, sonra veya eşzamanlı olduğunu kim bilebilir? En azından 101'in 100'den sonra olduğunu bildiğiniz zaman SVN sistemine kıyasla çok az bağlam vardır. İkincisi, DCVS kaynak kontrolünün doğası, sonraki toplamalar aynı topu ilerletmeyebileceği zaman işleri birçok yönden doğrusal hale getirir.

Sonunda, yapı numaralarını dağıtmak için doğru görünürlük ve kabiliyete sahip olduğundan yapı sayılarını dağıtmak için bir yapı sunucusu kullanmaya karar verdik.


2

Ben otomatik olarak sürüm numaralarını oluşturmak için bir C # DLL bir Visual Studio derleme sistemi için aşağıdaki düzeni kullanın (Tarihsel olarak dağıtımlar doğru yapılmayan sorunları vardı, bu yüzden doğru sürümün dağıtımını garanti etmek için temiz bir yol gerekli).

  • Major - Sabit kodlanmış 1, genellikle iş tarafından belirlenir
  • Küçük - Sert kodlanmış 0, genellikle iş tarafından belirlenir
  • Düzeltme - 1 Ocak 2010'dan bu yana geçen gün sayısı (veya başka bir keyfi başlangıç ​​tarihi)
  • Yapı - Geceyarısından bu yana geçen saniye sayısının yarısı (16 bit işaretsiz bir sayı olduğu için)

Bu, oynayabileceğiniz 2 adet 16 bit işaretsiz sayıya sahip olduğunuzu varsayar. Daha küçük sayılar kullanan eşdeğer bir sistem oluşturmak da yapılabilir.

Ayrıca sayısal olmayan alanların meta veri olarak ekleyebiliyorsanız yardımcı olabileceğini unutmayın. Örneğin git sürüm numarasını Bilgi Sürümü numarası olarak eklemek.


2

Doğrudan git durumu, log ve diff çıkışını çalıştırılabilir dosyaya bağlıyorum. Sonra bunu yazdırmak için bir seçenek var. Avantajı, yalnızca ikili dosyanızın hangi daldan oluşturulduğunu değil, aynı zamanda hangi taahhüt edilmemiş kaynak kodu değişikliklerinin dahil edildiğini de anlayabilmenizdir. Bakınız:

https://github.com/colding/MercuryFIX/tree/master/stdlib/scm_state

Bu 3 dosyayı kendi SCM durum kitaplığınızı oluşturmak için kullanabilmeniz gerekir.


0

Autorevision kullanımını tavsiye ederim .

Çeşitli biçimlerde çıktılar alabilirsiniz, örneğin c stili başlık .

Bir şeyleri nasıl bağlayabileceğinize dair birkaç örnek de (contribs dir'de) vardır, böylece kim inşa ediyorsa ve nasıl yapıyorlarsa yapsınlar, bir tarball'dan inşa etseler bile, her zaman aynı sürüm bilgilerini alırlar.

Ayrıca, gitAutorevision ile birlikte çalıştığı svnve kurduktan hgsonra çok fazla değişiklik yapmak zorunda kalmadan svn'den geçiş yapmayı kolaylaştırdığı için.


Maalesef Autorevision belgelerinde herhangi bir öneri yok gibi görünüyor. Autorevision tarafından oluşturulan üstbilgiden hangi bilgileri benzersiz ve açık bir yazılım sürümü dizesi oluşturmak için kullanıyorsunuz / birleştiriyorsunuz?
Silicomancer

Bu istediğiniz şekilde Okunabilir bağlıdır: <VCS_TAG>-<VCS_SHORT_HASH>, <VCS_TAG>-<VCS_TICK>hatta <VCS_ACTION_STAMP>bütün iş should. Bu sembollerin her birinin tam bir listesini istiyorsanız man sayfasını kontrol etmenizi öneririm .
dak180
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.