web-dev-qa-db-fra.com

Github: mettre en miroir des pages gh à maîtriser

Je développe un plugin jQuery qui est hébergé sur GitHub. Il a une démo incluse dont je copie et pousse manuellement vers la branche gh-pages, ce que j'aimerais faire, c'est que lorsque je pousse un changement vers master il est automatiquement poussé vers gh-pages, ou au moins une configuration où ils sont mis en miroir.

J'ai déjà vu cela question mais je ne sais pas si cela répond vraiment à ma question concernant ces exigences:

  1. J'utilise Tower , cela ne me dérange pas d'utiliser le terminal (Mac) pour apporter des modifications à la configuration, tant que la solution fonctionne avec cette interface graphique.
  2. Je veux seulement cette "mise en miroir" sur certains dépôts, pas sur tous sur ma machine.

À votre santé

67
Ben Everard
git checkout gh-pages
git merge master
git Push Origin gh-pages
66
Steve

Ajoutez les 2 lignes suivantes au [remote "Origin"] section de .git/config:

Push = +refs/heads/master:refs/heads/gh-pages
Push = +refs/heads/master:refs/heads/master

Chaque fois que vous Push il poussera automatiquement master vers les pages gh également. J'utilise ceci pour le projet jQuery Lifestream .

106
christianvuerings

Ne faites pas ce que denbuzze suggère ci-dessus !! Le + (signe plus) dans le Push lui permet d'accepter tranquillement les mises à jour non rapides. J'ai découvert à la dure que cela peut irrévocablement entraîner la perte de travail en menant à des commissions pendantes. La simple suppression des signes plus rend cette approche plus sûre.

Push = refs/heads/master:refs/heads/gh-pages
Push = refs/heads/master:refs/heads/master

maintenant au lieu de provoquer une mise à jour forcée, cela provoquera une suggestion d'avertissement et de traction

To https://github.com/someuser/repo.git
 ! [rejected]        master -> gh-pages (fetch first)
 ! [rejected]        master -> master (fetch first)
error: failed to Push some refs to 'https://github.com/someuser/repo.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git Push --help' for details.
27
MCSDWVL

J'ajoute d'autres explications aux réponses @ denbuzze et @ MCSDWVL .

Si vous voulez pousser les deux à master et gh-pages Automatiquement chaque fois que vous exécutez git Push Origin, Vous voudrez probablement ajouter une Refspec à la configuration git de votre dépôt.

Ainsi, selon le livre git-scm , vous pouvez ajouter deux RefSpecs , en ajoutant deux valeurs Push au fichier de configuration du référentiel .git/config:

[remote "Origin"]
url = https://github.com/<github_user>/<repo_name>
      fetch = +refs/heads/*:refs/remotes/Origin/*
      Push = refs/heads/master:refs/heads/master
      Push = refs/heads/master:refs/heads/gh-pages

Cela entraînera un git Push Origin Pour:

  1. Poussez la branche locale master vers la branche distante master
  2. Poussez la branche locale master vers la branche distante gh-pages

par défaut.

Remarque : utiliser un + Avant que la spécification ne force le Push à repo. Utilisez-le avec prudence:

Le format de la spécification de référence est un + Facultatif, suivi de <src>:<dst>, Où <src> Est le modèle de références du côté distant et <dst> Est l'endroit où ceux-ci les références seront rédigées localement. Le + Dit à Git de mettre à jour la référence même si ce n'est pas une avance rapide.

9
raviolicode

Personnellement, j'aime envelopper cela dans un alias:

alias gpogh="git checkout gh-pages && git merge master && git Push Origin gh-pages && git checkout -"

Cela reflète votre maître pour gh-pages, pousse vers github, puis revient à la branche précédente sur laquelle vous travailliez.

2
dhulihan

OU vous pouvez simplement utiliser la cmd ci-dessous, cela poussera votre branche principale locale vers la branche principale de gh-pages. git Push -f Origin master:gh-pages

2
DJ Jaiswal

commit and Push to master ..

puis :

git checkout gh-pages  // -> go to gh-pages branch
git rebase master // bring gh-pages up to date with master
git Push Origin gh-pages // commit the changes
git checkout master // return to the master branch
1
azl

[~ # ~] mise à jour [~ # ~] : GitHub permet désormais de publier des pages depuis n'importe quelle branche et répertoire de votre choix.


Il était beaucoup plus facile pour moi d'utiliser le gh-pages branche en tant que maître. Le "maître" n'a rien de magique; c'est juste un autre nom de branche. Il y a c'est quelque chose de magique sur les pages gh, car c'est là que GitHub recherche index.html pour servir votre page.

En savoir plus dans mon autre réponse sur ce sujet .

En utilisant gh-pages en tant que maître est également plus facile que les sous-arbres, qui sont plus faciles que la mise en miroir. Vous pouvez utiliser git subtree comme décrit ici ou ici : si vous avez un répertoire qui contient votre démo, vous pouvez pousser ce répertoire vers le gh-branch avec une seule commande. Disons que vous nommez le répertoire gh-pages pour clarifier les choses. Ensuite, après avoir validé et poussé vos modifications vers master, exécutez ceci pour mettre à jour les pages gh:

git subtree Push --prefix gh-pages Origin gh-pages

Le problème est que si vos fichiers dans gh-pages fait référence aux fichiers dans d'autres répertoires extérieurs. Les liens symboliques ne fonctionnent pas, vous devrez donc copier fichiers dans le répertoire qui sert de pages gh.

Si vous tilisez gh-pages en tant que maître, ce problème ne se produira pas.

1
Dan Dascalescu