Github:将 gh-pages 镜像到 master

Posted

技术标签:

【中文标题】Github:将 gh-pages 镜像到 master【英文标题】:Github: Mirroring gh-pages to master 【发布时间】:2011-08-14 00:40:49 【问题描述】:

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

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

    我使用Tower,我不介意使用终端 (Mac) 来更改配置,只要解决方案与此 GUI 配合使用即可。 我只希望在某些存储库上“镜像”,而不是在我机器上的所有存储库上。

干杯

【问题讨论】:

Github 现在允许从 master 分支或 master 分支中的 /docs 驱动页面。 github.com/blog/2228-simpler-github-pages-publishing 【参考方案1】:

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

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

每次您push 时,它也会自动将 master 推送到 gh-pages。 我将它用于jQuery Lifestream project。

【讨论】:

@James 不客气,我花了一段时间才找到这个。 每个本地 repo 是否每个人都必须这样做?或者当你克隆它时它会自动快乐吗? (在您提交此更改之后)您可以提交更改到 .git/config 吗? 这很酷,只是这个更改没有被签入到项目中,所以每个人都可以在他们的本地盒子上手动进行更改。它很容易迷路。 有没有一种典型的方式来分享.git/config更改之类的内容? @b.long 现在越来越多的人使用 Dotfiles。 dotfiles.github.com 这些包含有用的 shell 脚本和良好的默认值【参考方案2】:
git checkout gh-pages
git merge master
git push origin gh-pages

【讨论】:

干杯史蒂夫,我稍后会试一试,告诉你我的进展如何。 好人史蒂夫,原来的解决方案不起作用,但这是一种享受。 @Visgean Skeloru,所以每次我向 master 推送时,我都必须为 gh-pages 执行此操作,以便 master 和 gh-pages 会被镜像。 @HattrickNZ:是的,但是看看 christianvuerings 解决方案,它是永久的和自动的...... GitHub now allows pages to be published from any branch and directory you want.【参考方案3】:

不要做上面 denbuzze 建议的事情!!推送中的 +(加号)使其安静地接受非快进更新。我发现这很难通过导致悬空提交而不可避免地导致工作丢失。只需删除加号即可使其成为一种更安全的方法。

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,这是真的吗!你有没有骗我们! :) 我不确定 denbuzze 的建议是否会破坏任何东西,因为我没有测试它,但我知道你的建议有效。 @MCSDWVL:你为什么不对 denbuzze 的回答发表评论? GitHub now allows pages to be published from any branch and directory you want. 我的配置源部分有: fetch = +refs/heads/*:refs/remotes/origin/* url = git@something:user/repo.git 因为它正在使用 * ,我还需要添加两行。我需要我的一个分支与 master 同步。【参考方案4】:

我正在为@denbuzze 和@MCSDWVL 的答案添加进一步的解释。

如果您想在每次运行 git push origin 时自动推送到 mastergh-pages,您可能需要将 Refspec 添加到您的 repo 的 git 配置中。

因此,根据git-scm book,您可以通过将两个push 值添加到repo 配置文件.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

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

默认情况下。

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

refspec 的格式是可选的+,后跟&lt;src&gt;:&lt;dst&gt;,其中&lt;src&gt; 是远程端引用的模式,&lt;dst&gt; 是这些引用将在本地写入的位置。 + 告诉 Git 更新引用,即使它不是快进。

【讨论】:

这会将所有文件从master推送到gh-pages,即使是那些与gh-pages无关的文件?为什么 GitHub 让事情变得如此复杂?如果它只是渲染一个文件夹gh-pages,会不会简单得多?这是创建这种gh-pages folder setup 的尝试。 GitHub now allows pages to be published from any branch and directory you want. 我在配置中还有:[branch "master"] remote = origin merge = refs/heads/master 我还需要在 Origin 部分添加第一行推送到 master 吗?【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

提交推送掌握..

然后:

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】:

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

【讨论】:

【参考方案8】:

更新: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作为master也比子树容易,子树比镜像容易。您可以按照here 或here 的描述使用git subtree:如果您有一个包含演示的目录,您可以使用一个命令将该目录推送到gh-branch。假设您将目录命名为 gh-pages 以说明问题。然后,在您提交更改并将更改推送到 master 后,运行此命令以更新 gh-pages:

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

问题是如果您在gh-pages 中的文件引用了它之外的其他目录中的文件。符号链接不起作用,因此您必须复制用作 gh-pages 的目录中的文件。

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

【讨论】:

以上是关于Github:将 gh-pages 镜像到 master的主要内容,如果未能解决你的问题,请参考以下文章

github怎样创建gh-page

创建github仓库的gh-pages分支

从 Github gh-pages 永久重定向

Github 中提交项目到自己仓库的gh-pages分支

github 的 gh-pages 和 master 分支是啥关系

github 的 gh-pages 和 master 分支是啥关系