Pergunta

Eu estou tentando criar um ramo de preparo no Heroku, mas há algo que eu não começ completamente.

Assumindo que eu já criou um aplicativo heroku e configurar o controle remoto para ponto ao estadiamento-remoto, Se eu fizer:

git checkout -b staging staging-remote/master

Eu recebo uma filial local chamado de 'encenação', que faixas encenando-remote / master - ou isso é o que eu pensei ....

Mas:

git remote show staging-remote

Dá-me o seguinte:

remote staging
  Fetch URL: git@heroku.com:myappname.git
  Push  URL: git@heroku.com:myappname.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    staging-remote merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Como você pode ver, a atração parece razoável, mas o impulso padrão não. Isso implica que, se eu faço:

git push staging-remoto

Eu estou indo para empurrar o meu branch master local até ao ramo de teste. Mas isso não é o que eu quero .... Basicamente, eu quero atualizações fundir em meu ramo de preparo, então facilmente empurrá-lo para heroku sem ter que especificar o ramo assim:

git push staging-remote mybranch:master

O acima não é difícil de fazer, mas eu quero evitar acidentalmente fazendo o impulso anterior e empurrando o ramo errado ... Isso é duplamente importante para o ramo de produção que eu gostaria de criar!

Eu tentei mexer com git config, mas ainda não descobri como obter este direito ainda ...

Foi útil?

Solução

Eu testei e @juba e @ versões do MatthewFord funcionar perfeitamente!

git config remote.staging.push staging:master

Isso empurra meu ramo tópico local chamado encenar na filial remota mestre no repositório remoto chamado encenar .

@nickgrim colocá-lo na forma geral como assim:

git config remote.[remoteRepositoryName].push [localBranchName]:[remoteBranchName]

Atualização:

Além disso, git moderna vai convenientemente executar o comando de configuração acima para você quando você git push com a opção -u:

git push -u staging staging:master

Outras dicas

Eu tenho um ramo chamado heroku, e isso funcionou para mim:

git config remote.heroku.push heroku:master

o problema que você está enfrentando é heroku ignora todos os outros ramos do mestre.

Do livro "O'Reilly - Controle de Versão com Git" Página 184 | Capítulo 11: repositórios remotos

Durante uma operação de git push, normalmente você deseja fornecer e publicar as alterações que você fez em seus ramos de tópicos locais. Para permitir que outros a encontrar as alterações na repositório remoto depois de carregá-las, as alterações devem aparecer nessa repositório como ramos tópico. Assim, durante um comando típico git push, os ramos de origem de seu repositório são enviados para o repositório remoto usando um refspec tais como:

+refs/heads/*:refs/heads/*

Esta refspec pode ser parafraseado como: A partir do repositório local, tomar o nome de cada ramo encontrado sob o namespace fonte refs/heads/ e colocá-lo em um nome semelhante, ramo de correspondência sob o destino refs/heads/ namespace no repositório remoto. O primeiro refs/heads/ refere-se ao seu repositório local (porque você está executando um push), e o segundo refere-se ao repositório remoto. Os asteriscos garantir que todos os ramos são replicadas. ...


É por isso que o exemplo de Juba deve falhar. o refspec corrigido deve ser:

git config remote.staging-remote.push +refs/heads/local_branch_name:refs/heads/master

Na página Everiday Git com 20 comandos mais ou menos :

http://www.kernel.org/pub /software/scm/git/docs/everyday.html

Parece que você pode conseguir o que você quer fazer, adicionando uma directiva de configuração para o seu repositório git local, algo como:

git config remote.staging-remote.push mybranch:refs/remotes/staging-remote/master

Então, se você fizer um git push de sua mybranch filial local, deve ser empurrada para o mestre ramo de sua staging-remoto remoto.

No entanto, verifique com git remote show staging-remote e testá-lo com cuidado antes de usá-lo, como eu estou longe de ser um especialista em git ...

Eu não poderia descobrir uma maneira de fazer isso, mas no final eu achei uma tarefa rake útil para tornar mais fácil: http://www.jbarnette.com/2009/11/ 10 / implantando-se heroku.html

Eu estou tendo o mesmo problema tentando descobrir como lidar com a política de ignorar todos os ramos, mas 'mestre' do Heroku. Derrota meio toda a ponto de manter filiais separadas se você pode sempre apenas testar o branch master em Heroku.

A consequência desta restrição é que tudo o que locais ramo tópico I podem ser trabalhando, eu gostaria de uma maneira fácil de mudar mestrado Heroku para esse ramo tópico local e fazer um "-f git push" para over-write mestre em Heroku. Escusado será dizer, seria uma boa idéia ter um repositório remoto separado (como Github), a volta tudo sem essa restrição. Eu chamaria isso uma "origem" e use "heroku" para Heroku para que "git push" sempre faz o backup de tudo.

O que eu tenho de ler a seção "Pushing Refspecs" do http://progit.org /book/ch9-5.html seja

git push heroku locais-topic-ramo: refs / heads / master

O que eu gostaria realmente é uma maneira de configurá-lo no arquivo de configuração para que "heroku git push" sempre faz o acima, substituindo "-topic locais-branch" com o nome de tudo o que o meu atual ramo acontece com ser.

posso perguntar isso como uma nova questão, para ver se alguém já descobriu como fazer isso.

Isso funciona. Eu usei-o mais do que algumas vezes para configurar clientes com git-flow, heroku, e um serviço de git backup.

.git / config para o repo:

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  ignorecase = true
[heroku]
  account = youraccount
[remote "origin"]
  url = git@bitbucket.org:youruser/yoursite.heroku.com.git # or github, etc.
  fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
  remote = origin
  merge = refs/heads/master
[branch "staging"]
  remote = origin
  merge = refs/heads/staging
[branch "develop"]
  remote = origin
  merge = refs/heads/develop
[remote "production"]
  pushurl = git@heroku.com:your-prod-app.git
  push = master:master
[remote "staging"]
  pushurl = git@heroku.com:your-staging-app.git
  push = staging:master

Tudo funcionando corretamente:

git push origin

git pull origin

git push staging

git push production

Pense em buscar e impulso como como stdout e stdin, onde ambos podem ser redirecionados ou fechada para ser um caminho. Também se alguém sabe como obter essas configurações, sem cortar .git / config, sinta-se livre para alterar com uma edição, pontos de karma é certo a seguir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top