Github: Mirroring gh-pages à maîtriser
-
24-10-2019 - |
Question
Je développe un plugin jQuery qui est en cours d'hébergement sur GitHub. Il a une démo inclus dont je copie manuellement et pousser à la gh-pages
branche, ce que je voudrais faire est d'avoir ainsi quand je pousse un changement à master
il est poussé automatiquement à gh-pages
, ou au moins une configuration où ils sont en miroir.
Je l'ai déjà vu cette question mais ne savez pas si elle répond vraiment à ma question en ce qui concerne les exigences suivantes:
- J'utilise tour , je ne me dérange pas en utilisant le terminal (Mac) pour apporter des modifications de config, tant que les travaux de solution avec cette interface graphique.
- Je veux que ce « miroir » sur certaines prises en pension, pas tous sur ma machine.
Vive
La solution
git checkout gh-pages
git merge master
git push origin gh-pages
Autres conseils
Ajoutez les lignes suivantes 2 lignes à la section [remote "origin"]
de .git/config
:
push = +refs/heads/master:refs/heads/gh-pages
push = +refs/heads/master:refs/heads/master
Chaque fois que vous push
il sera automatiquement pousser maître gh-pages ainsi.
J'utilise cela pour le projet jQuery Lifestream .
Ne pas faire ce que suggère denbuzze ci-dessus !! Le signe plus (+) dans la poussée, il est tranquillement accepter les mises à jour non-fastforward. J'ai découvert la dure que cela peut causer irrévocablement le travail à perdre en menant à commits ballants. supprimant simplement les signes plus rend cette approche plus sûre.
push = refs/heads/master:refs/heads/gh-pages
push = refs/heads/master:refs/heads/master
au lieu de faire une mise à jour de force cela entraînera une suggestion d'avertissement et 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 des explications supplémentaires à @denbuzze et @ réponses de MCSDWVL.
Si vous voulez pousser les deux à master
et gh-pages
automatiquement à chaque fois que vous exécutez git push origin
, vous voulez probablement ajouter un Refspec à la configuration de votre repo git.
Ainsi, selon le git-scm livre , vous pouvez ajouter deux RefSpecs , en ajoutant deux valeurs push
dans le fichier de configuration repo .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 provoquera une git push origin
à:
- Appuyez sur la branche
master
locale à la branchemaster
à distance - Appuyez sur la branche
master
locale à la branchegh-pages
à distance
par défaut.
Remarque : l'aide d'un +
avant les causes spécifications de pousser de force à la prise en pension. Utilisez-le avec précaution:
Le format du refspec est une option
+
, suivie<src>:<dst>
, où<src>
est le modèle des références du côté opposé et<dst>
est l'endroit où les références sont écrites localement. Le+
dit Git de mettre à jour la référence même si elle n'est pas une avance rapide.
Personnellement, je aime à envelopper ceci dans un alias:
alias gpogh="git checkout gh-pages && git merge master && git push origin gh-pages && git checkout -"
Ce miroir à votre maître gh-pages
, pousse à github, puis Repasse la branche précédente que vous travaillez.
ou vous pouvez simplement utiliser le cmd ci-dessous, cela va pousser votre branche maître local branche maître gh-pages.
git push -f origin master:gh-pages
commit et poussée à maîtriser ..
alors:
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
UPDATE: GitHub now allows pages to be published from any branch and directory you want.
It was much easier for me to use the gh-pages
branch as master. There's nothing magical about "master"; it's just another branch name. There is something magical about gh-pages, because that's where GitHub is looking for index.html to serve your page.
Read more in my other answer on this topic.
Using gh-pages
as master is also easier than subtrees, which are easier than mirroring. You could use git subtree
as described here or here: if you have a directory which contains your demo, you can push that directory to the gh-branch
with one command. Let's say you name the directory gh-pages
to make things clear. Then after you've committed and pushed your changes to master
, run this to update gh-pages:
git subtree push --prefix gh-pages origin gh-pages
The problem is if your files in gh-pages
refer to files in other directories outside it. Symlinks don't work, so you'll have to copy files in the directory that serves as gh-pages.
If you use gh-pages
as master, this problem won't occur.