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:
À votre santé
git checkout gh-pages
git merge master
git Push Origin gh-pages
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 .
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.
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:
master
vers la branche distante master
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.
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.
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
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
[~ # ~] 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.