Sto usando capistrano per distribuire un'applicazione RoR. Il codebase è in un repository git e la ramificazione è ampiamente usata nello sviluppo. Capistrano utilizza il deploy.rb
file per le sue impostazioni, uno dei quali è il ramo da cui eseguire la distribuzione.
Il mio problema è questo: diciamo che creo un nuovo ramo A dal master . Il file di distribuzione farà riferimento al ramo principale . Lo modifico, quindi A può essere distribuito per testare l'ambiente. Finisco di lavorare sulla funzione e unisco il ramo A in master . Dal momento che il deploy.rb
file da A è più fresco, si ottiene fuse e ora il deploy.rb
nel maestro riferimenti ramo A . È ora di modificare nuovamente.
Sono molte modifiche manuali apparentemente non necessarie: il parametro deve sempre corrispondere al nome del ramo corrente. Inoltre, è facile dimenticare di modificare le impostazioni ogni volta.
Quale sarebbe il modo migliore per automatizzare questo processo?
Modifica: risulta che qualcuno ha già fatto esattamente ciò di cui avevo bisogno :
Questa mattina ho avuto occasione di distribuire un ramo di un repository git su un server di gestione temporanea, ma non avevo la più pallida idea di come. Una rapida ricerca nel codice sorgente di Capistrano ha rivelato che avrei potuto usare set
:branch "branch_name"
nel mio script deploy. L'ho provato e ha funzionato. Ho quindi pensato che avrei dovuto fare un cambiamento simile in tutti i miei rami. Certo, sono una zolla pigra e mi chiedevo se non ci fosse un modo migliore.Se non hai familiarità con git, l'output del comando git branch è un elenco di rami con un asterisco che contrassegna quello attualmente estratto sul tuo computer locale. Per esempio:
> git branch * drupal_authentication fragment_caching master
Quindi, ho pensato, e se avessi semplicemente analizzato l'output e cercato il ramo contrassegnato come corrente:
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
Ora sono in grado di distribuire qualsiasi ramo è attivo sul mio computer locale da un singolo script di distribuzione condiviso.