Github:镜像gh页面掌握

时间:2011-04-27 16:34:01

标签: git github github-pages git-tower

我正在开发一个在GitHub上托管的jQuery插件。它包含了一个演示,其中我手动复制并推送到分支gh-pages,我想要做的就是这样,当我将更改推送到master时,它会自动推送到gh-pages,或者至少是一个镜像设置。

我已经看过这个question但不确定它是否真的回答了我关于这些要求的问题:

  1. 我使用Tower,我不介意使用终端(Mac)对配置进行更改,只要解决方案适用于此GUI。
  2. 我只希望在某些回购中“镜像”,而不是在我的机器上对所有这些回购。
  3. 干杯

8 个答案:

答案 0 :(得分:106)

将以下两行添加到[remote "origin"]的{​​{1}}部分:

.git/config

每当你push = +refs/heads/master:refs/heads/gh-pages push = +refs/heads/master:refs/heads/master 时,它也会自动将master推送到gh-pages。 我将其用于jQuery Lifestream project

答案 1 :(得分:66)

git checkout gh-pages
git merge master
git push origin gh-pages

答案 2 :(得分:27)

不要做上面的建议 !!推送中的+(加号)使其能够安静地接受非快速更新。我发现这很难以通过导致悬空提交而不可逆转地导致工作丢失。简单地删除加号使这更安全。

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

现在不会导致强制更新,而是会导致警告&拉建议

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.

答案 3 :(得分:9)

我正在为@denbuzze@MCSDWVL答案添加进一步说明。

如果您想在每次运行master时自动同时推送gh-pagesgit push origin,则可能需要在回购的git配置中添加Refspec。

因此,根据git-scm book,您可以通过向repo配置文件push添加两个.git/config值来添加两个RefSpecs

[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

这会导致git push origin

  1. 将本地master分支推送到远程master分支
  2. 将本地master分支推送到远程gh-pages分支
  3. 默认情况下。

    注意:在规范导致强制推送到回购之前使用+。请谨慎使用:

      

    refspec的格式是可选的+,后跟<src>:<dst>,其中<src>是远程端引用的模式,<dst>是这些引用的位置将在当地撰写。 +告诉Git更新参考,即使它不是快进。

答案 4 :(得分:2)

我个人喜欢用别名包装它:

alias gpogh="git checkout gh-pages && git merge master && git push origin gh-pages && git checkout -"

这会将您的主人镜像到gh-pages,推送到github,然后切换回您正在处理的上一个分支。

答案 5 :(得分:2)

或者您可以使用下面的cmd,这会将您的本地主分支推送到gh-pages主分支。 ThreadContext

答案 6 :(得分:1)

提交推送以掌握..

然后:

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 :(得分:1)

更新GitHub now allows pages to be published from any branch and directory you want.

使用gh-pages分支作为主人更容易。 “大师”没什么神奇之处;它只是另一个分支名称。 关于gh-pages的神奇之处,因为GitHub正在寻找index.html来为你的页面服务。

my other answer on this topic中阅读更多内容。

使用gh-pages作为主副本也比子树更容易,后者比镜像更容易。您可以使用herehere所述的git subtree:如果您有一个包含演示的目录,则可以使用一个命令将该目录推送到gh-branch。假设您将目录gh-pages命名为清楚。然后在您提交并将更改推送到master后,运行此更新以更新gh页面:

git subtree push --prefix gh-pages origin gh-pages

问题是,gh-pages中的文件是否引用其他目录中的文件。符号链接不起作用,因此您必须在用作gh页面的目录中复制文件。

如果您 use gh-pages as master ,则不会出现此问题。