Estou usando o capistrano para implantar um aplicativo RoR. A base de código está em um repositório git, e a ramificação é amplamente usada no desenvolvimento. Capistrano usa o deploy.rb
arquivo para suas configurações, sendo um deles o ramo para implantar.
Meu problema é o seguinte: digamos que eu crie um novo ramo A do mestre . O arquivo de implantação fará referência à ramificação principal . Eu edito isso, para que A possa ser implantado no ambiente de teste. Termino de trabalhar no recurso e fundo o ramo A no mestre . Uma vez que o deploy.rb
arquivo a partir de A é mais fresco, torna-se fundiram em e agora o deploy.rb
de mestre referências filiais A . Hora de editar novamente.
São muitas edições manuais aparentemente desnecessárias - o parâmetro sempre deve corresponder ao nome atual da filial. Além disso, é fácil esquecer de editar as configurações sempre.
Qual seria a melhor maneira de automatizar esse processo?
Edit: Acontece que alguém já tinha feito exatamente o que eu precisava :
Esta manhã, tive a oportunidade de implantar uma filial de um repositório git em um servidor intermediário, mas não tinha a menor idéia de como. Uma rápida pesquisa no código-fonte capistrano revelou que eu poderia usar o conjunto
:branch "branch_name"
no meu script de implantação. Eu tentei e funcionou. Imaginei que precisaria fazer uma alteração semelhante em todos os meus ramos. Claro, eu sou um preguiçoso e me perguntei se não havia uma maneira melhor.Se você não estiver familiarizado com o git, a saída do comando git branch é uma lista de branches com um asterisco marcando o que está atualmente em check-out na sua máquina local. Por exemplo:
> git branch * drupal_authentication fragment_caching master
Então, pensei, e se eu apenas analisasse a saída e procurasse o ramo marcado como atual:
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
Agora sou capaz de implantar qualquer ramificação que esteja atual na minha máquina local a partir de um único script de implantação compartilhado.