Question

Je suis en train de créer une branche de mise en scène sur Heroku, mais il y a quelque chose que je ne comprends pas tout à fait.

En supposant que je l'ai déjà créé une application Heroku et la configuration de la télécommande pour pointer vers la mise en scène à distance, Si je fais:

git checkout -b staging staging-remote/master

Je reçois une branche locale appelée « mise en scène » qui suit la mise en scène à distance / maître - ou c'est ce que je pensais ....

git remote show staging-remote

me donne ceci:

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)

Comme vous pouvez le voir, l'attraction semble raisonnable, mais la poussée par défaut ne fonctionne pas. Cela implique que si je fais:

git pousser la mise en scène à distance

Je vais pousser ma branche maître local à la branche de mise en scène. Mais ce n'est pas ce que je veux .... Au fond, je veux fusionner les mises à jour dans ma branche de mise en scène, puis poussez facilement à heroku sans avoir à spécifier la branche comme ceci:

git push staging-remote mybranch:master

Ce qui précède est pas difficile à faire, mais je veux éviter de faire accidentellement la précédente pousser et pousser la mauvaise branche ... Ceci est d'autant plus important pour la branche de production, je voudrais créer!

J'ai essayé de jouer avec git config, mais ne l'ai pas compris comment obtenir ce droit encore ...

Était-ce utile?

La solution

Je l'ai testé et @juba et @ versions de MatthewFord fonctionnent parfaitement!

git config remote.staging.push staging:master

Cela pousse ma branche locale sujet nommé mise en scène dans la branche à distance maître sur le dépôt distant nommé mise en scène .

@nickgrim le mettre sous la forme générale comme ceci:

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

Mise à jour:

En outre, git moderne sera commodément exécuter la commande de configuration ci-dessus pour vous lorsque vous git push avec l'option -u:

git push -u staging staging:master

Autres conseils

J'ai une branche appelée Heroku, et cela a fonctionné pour moi:

git config remote.heroku.push heroku:master

le problème que vous êtes confronté est heroku ignore toutes les branches autres que maître.

Du livre "O'Reilly - Version Control with Git" Page 184 | Chapitre 11: Référentiels à distance

  

Lors d'une opération git push, vous voulez généralement de fournir et de publier les modifications   vous avez fait sur vos branches locales sujet. Pour permettre aux autres de trouver vos changements dans la   dépôt distant après que vous les télécharger, vos modifications doivent apparaître dans ce référentiel comme branches de sujet. Ainsi, au cours d'une commande git push typique, les branches source de   votre dépôt sont envoyés au dépôt distant en utilisant un refspec tels que:

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

Cette refspec peut être paraphrasé comme:   À partir du dépôt local, prendre chaque nom de la branche se trouve sous l'espace de noms source   refs/heads/ et le placer dans un même nom, branche correspondant sous la destination   espace de noms refs/heads/ dans le dépôt distant.   La première refs/heads/ fait référence à votre dépôt local (parce que vous êtes l'exécution d'un coup de pouce),   et la deuxième fait référence au référentiel distant. Les astérisques veillent à ce que toutes les branches   sont répliqués.   ...


Voilà pourquoi l'exemple de Djouba devrait échouer. le refspec doit être corrigée:

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

Dans la page Everiday Git avec 20 commandes ou donc :

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

Il semble que vous pouvez réaliser ce que vous voulez faire en ajoutant une directive de configuration à votre dépôt git local, quelque chose comme:

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

Alors, si vous faites un git push de votre mybranch branche locale, il doit être poussé à la maître branche de votre la mise en scène à distance à distance.

Néanmoins, s'il vous plaît vérifier avec git remote show staging-remote et tester soigneusement avant de l'utiliser, comme je suis loin d'être un expert git ...

Je ne pouvais pas trouver un moyen de le faire, mais à la fin je l'ai trouvé une tâche de coupe à portée de main pour le rendre facile: http://www.jbarnette.com/2009/11/ 10 / déploiement à heroku.html

Je vais avoir le même problème à essayer de comprendre comment faire face à la politique de Heroku d'ignorer toutes les branches, mais « maître ». Il défaites un peu le point tout en gardant des branches séparées si vous ne pouvez jamais tester la branche maître sur Heroku.

La conséquence de cette restriction est que quelle que soit la branche thématique locale je travaillerai, je voudrais un moyen facile de changer le maître de Heroku à cette branche thématique locale et faire un « git pousser -f » à maître sur-écriture sur Heroku. Inutile de dire que ce serait une très bonne idée d'avoir un dépôt distant séparé (comme Github), pour sauvegarder tout sans cette restriction. Je dirais que l'une « origine » et utiliser « Heroku » pour Heroku pour que « git push » toujours sauvegarde tout.

Ce que je suis arrivé à la lecture de la section "Pousser Refspecs" de http://progit.org /book/ch9-5.html est

git poussée heroku-sujet-branche locale: refs / heads / master

Ce que je voudrais vraiment est un moyen de mettre cela dans le fichier de configuration de sorte que « git pousser heroku » fait toujours ce qui précède, en remplaçant « branche locale sujet » avec le nom de tout ce que ma branche actuelle arrive à être.

Je peux poser une nouvelle question, pour voir si quelqu'un d'autre a compris comment faire.

Cela fonctionne. Je l'ai utilisé plus de quelques fois pour la mise en place avec les clients git-flow, Heroku, et un service git de sauvegarde.

.git / config pour le 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

Tout fonctionne correctement:

git push origin

git pull origin

git push staging

git push production

Pensez à fetch et pousser comme comme stdout et stdin, où les deux peuvent être redirigés ou fermé pour être un moyen. Aussi, si quelqu'un sait comment obtenir ces paramètres sans piratage .git / config, s'il vous plaît ne hésitez pas à modifier avec une modification, des points de karma ne manqueront pas de suivre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top