2010-12-01 5 views

cevap

8

David'in yönüne göre, "git_info.rb" başlatıcısı oluşturarak bunu çözdüm. git_info.rb içeriği olan

sizin Rails'in initializers dizinde bu dosyayı yerleştirin:

GIT_BRANCH = `git status | sed -n 1p`.split(" ").last 
GIT_COMMIT = `git log | sed -n 1p`.split(" ").last 

Sonra altbilgi, bu çıkışını kullanabilirsiniz (HAML sözdizimi):

#rev_info 
    = "branch: #{GIT_BRANCH} | commit: #{GIT_COMMIT}" 

#rev_info yazı tipi rengini arka plan rengiyle aynı şekilde ayarlamak isteyebilirsiniz, böylece metin yalnızca imlecinizle vurguladığınızda görünür.

Bunu yeni denedim ve geliştirme modunda çalışırken, "caploy" post capistrano dağıtımıyla birlikte dalın üzerine yazılması gibi görünüyor. Capistrano, dağıtımda "konuşlandır" olarak adlandırılan kendi yerel şubesini oluşturuyor olmalı? Capistrano kullanmaz insanlar için

+1

ile son atama 'ayarlayın: copy_exclude, ".git/*"' bizim capistrano deploy.rb site kapalı bu ekstra veriyi tutmak için. Bu nedenle, yukarıdaki geliştirme çalışmaları sırasında üretim için git repo yoktur. Ancak, capistrano (ve heroku, tesadüfen) dağıtıma eklenen bir REVISION dosyası oluşturur, böylece SHA etiketini var olduğunda oradan kullanabilirsiniz. – jwadsack

+1

Neden 'git describe 'kullanılmıyor? –

0

Uzun zaman önce ben tahrip için yaptım: Ben koymak bir in başlatıcısı
küresel

SVN_REVISION = `svn info | ruby -ne 'puts $1 if $_ =~ /^Revision: ([0-9]*)/'` 

ve uygulama düzeninde

:

<div id='site_footer'> 
    ... 
    <% unless SVN_REVISION.blank? -%> 
    <p id='version'> 
    v<%= SVN_REVISION %> 
    </p> 
    <% end -%> 
</div> 

yapabildin git ile küresel gibi bir şey değiştirmek:

git log -1 | ruby -ne 'puts $1 if $_ =~ %r{^Date: (.+) \+\d+$}' 

Şimdi düşünmeye, bu daha iyi olabilir:

  • capistrano bir yapılandırma dosyası (config/git_status.yml)
  • initializers yapılandırmasını ayrıştırır yaratır ve değişkenleri

setleri Emin değilim, sadece bir fikir.

8

, daha güzel bir tek:

ikinci en güzelini şeklinde sha verir
GIT_BRANCH = `git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3` 
GIT_COMMIT = `git log --pretty=format:'%h' -n 1` 
GIT_COMMIT_TIMESTAMP = `git log --pretty=format:'%ct' -n 1` 

(örn:: 4df21c0 config/ilklendiriciler/git_info.rb On

).

Üçüncüsü, daha sonra Time/DateTime kullanarak biçimlediğim UNIX TIMESTAMP değerini döndürür.

2

Genellikle tek bir git depoya dağıtmaz, ancak herhangi bir depo bilgisini içermeyen bir sürüm haline:

Capistrano git sha taahhüt her başarılı dağıtım ile revizyon dosyasını saklar.Bu dosyaya REVISION denir ve dağıtım dizininin kökünde bulunabilir. gibi bir şeyle deploy_version.rb:

konfigürasyonunda/senin Raylar uygulamanın initializers, bir dosya oluşturmak

if File.exists?('REVISION') 
    APP_REVISION = `cat REVISION` 
else 
    APP_REVISION = 'unknown' 
end 

Veya dağıtım eğer emin dışarıda her zaman bir yerini alabilir git depo var biz eklemek varsayılan olarak

if File.exists?('REVISION') 
    APP_REVISION = `cat REVISION` 
else 
    APP_REVISION = `git describe --abbrev=6 --always --tags.` 
end 
İlgili konular