Github:镜像gh页以掌握


68

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

我已经看过这个问题,但是不确定是否真的能回答我关于以下要求的问题:

  1. 我使用Tower,我不介意使用终端(Mac)来更改配置,只要该解决方案与此GUI兼容即可。
  2. 我只希望在某些存储库上进行“镜像”,而不希望在我的计算机上对所有存储库进行“镜像”。

干杯


1
Github现在允许从master分支或master分支/docs内驱动页面。github.com/blog/2228-simpler-github-pages-publishing
Ben Everard,

Answers:


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

干杯史蒂夫,我稍后再讲,告诉你我如何过。
本·埃弗拉德,

很好,史蒂夫,原来的解决方案没用,但是可以用。
Ben Everard

@Visgean Skeloru,因此,每次我推送到母版时,我都必须在gh页上执行此操作,这样母版和gh页才会被镜像。
HattrickNZ

1
@HattrickNZ:是的,但是看看christianvuerings解决方案,那是永久性的和自动的...
Visgean Skeloru


107

将以下两行添加到的[remote "origin"]部分.git/config

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

每次您push也会自动将master推送到gh页。我正在将它用于jQuery Lifestream项目


@James不客气,花了一段时间我也找到了这个。
christianvuerings

每个人都必须为每个本地仓库执行此操作吗?还是在克隆时自动开心?(在您完成此更改之后)您可以将更改提交到.git/config吗?
ThomasReggi 2012年

4
这很酷,只不过该更改没有被签入项目中,因此每个人都可以在本地盒子上手动进行更改。很容易迷路。
2012年

1
有没有共享.git/config变化之类的典型方法?
blong 2012年

1
@ b.long如今越来越多的人正在使用Dotfiles。dotfiles.github.com其中包含有用的shell脚本和良好的默认设置
christianvuerings

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.

@denbuzze,这是真的!你骗了我们!:)
KyleMit 2014年

我不确定denbuzze的建议是否会破坏任何东西,因为我没有对其进行测试,但是我确实知道您的建议是可行的。
Sevin7年

3
@MCSDWVL:您为什么不对denbuzze的答案发表评论?
Dan Dascalescu 2015年


我的配置原始部分有:fetch = + refs / heads / *:refs / remotes / origin / * url = git @ something:user / repo.git,因为它正在使用*,我仍然需要同时添加这两行。我需要将一个分支与master同步。
Prashant

9

我在@denbuzze@MCSDWVL答案中添加了进一步的解释。

如果您想在每次运行时自动推入mastergh-pages自动推入git push origin,则可能要向您的仓库的git config中添加一个Refspec。

因此,根据git-scm的书,您可以通过在repo配置文件中添加两个值来添加两个 RefSpecspush.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

这将导致git push origin

  1. 将本地master分支推送到远程master分支
  2. 将本地master分支推送到远程gh-pages分支

默认。

注意+在规范之前使用a会强制将其推送到仓库。请谨慎使用:

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


这样会将所有文件从master推送到gh-pages哪怕是与无关的文件gh-pages吗?为什么GitHub会使事情变得如此复杂?如果只渲染一个文件夹,会不会简单得多gh-pages?这是尝试创建这种gh-pages文件夹设置的尝试。
Dan Dascalescu 2015年


我在config中另外有:[branch“ master”] remote = origin merge = refs / heads / master是否还需要添加第一行以在Origin部分中推送到master?
Prashant

2

我个人喜欢将其包装为别名:

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

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


2

提交推送送给主人。

然后 :

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

2

或者,您可以只使用下面的cmd,这会将您的本地master分支推送到gh-pages master分支。 git push -f origin master:gh-pages


1

更新GitHub现在允许从所需的任何分支和目录发布页面。


对我来说,使用gh-pages分支作为主节点要容易得多。“主人”没有什么神奇的东西。它只是另一个分支名称。还有就是关于GH-页面神奇的东西,因为这是GitHub上寻找index.html的服务页面。

阅读更多有关该主题的其他答案

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

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

问题是您的文件是否gh-pages引用了其外部其他目录中的文件。符号链接无效,因此您必须文件复制到用作gh页的目录中。

如果您使用gh-pages为主,不会出现此问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.