可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm developing a jQuery plugin that's being hosting on GitHub. It has a demo included of which I'm manually copying and pushing to the branch gh-pages, what I'd like to do is have it so when I push a change to master it is automatically pushed to gh-pages, or at least a setup where they are mirrored.
I've already seen this question but not sure if it really answers my question with regard to these requirements:
- I use Tower, I don't mind using the terminal (Mac) to make changes to config, so long as the solution works with this GUI.
- I only want this 'mirroring' on certain repos, not on all of them on my machine.
Cheers
回答1:
git checkout gh-pages git merge master git push origin gh-pages
回答2:
Add the following 2 lines to the [remote "origin"] section of .git/config:
push = +refs/heads/master:refs/heads/gh-pages push = +refs/heads/master:refs/heads/master
Every time you push it will automatically push master to gh-pages as well. I'm using this for the jQuery Lifestream project.
回答3:
Do not do what denbuzze suggests above!! The + (plus sign) in the push makes it quietly accept non-fastforward updates. I found out the hard way that this can irrevocably cause work to be lost by leading to dangling commits. Simply removing the plus signs makes this a safer approach.
push = refs/heads/master:refs/heads/gh-pages push = refs/heads/master:refs/heads/master
now instead of causing a force update this will cause a warning & pull suggestion
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.
回答4:
I'm adding further explanation to @denbuzze and @MCSDWVL answers.
If you want to push both to master and gh-pages automatically each time you run git push origin, you probably want to add a Refspec to the git config of your repo.
So, according to the git-scm book, you can add two RefSpecs, by adding two push values to the repo config file .git/config:
[remote "origin"] url = https://github.com// fetch = +refs/heads/*:refs/remotes/origin/* push = refs/heads/master:refs/heads/master push = refs/heads/master:refs/heads/gh-pages
That will cause a git push origin to:
- Push the local
master branch to the remote master branch - Push the local
master branch to the remote gh-pages branch
by default.
Note: using a + before the spec causes to force push to the repo. Use it with caution:
The format of the refspec is an optional +, followed by :, where is the pattern for references on the remote side and is where those references will be written locally. The + tells Git to update the reference even if it isn’t a fast-forward.
回答5:
I personally like to wrap this in an alias:
alias gpogh="git checkout gh-pages && git merge master && git push origin gh-pages && git checkout -"
This mirrors your master to gh-pages, pushes to github, then switches back the previous branch you were working on.
回答6:
commit and push to master..
then :
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
回答7:
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.
回答8:
OR you can just use the cmd below, this will push your local master branch to gh-pages master branch. git push -f origin master:gh-pages