将本地主分支(master) *推送到* GitHub 上的 gh-pages 分支。

20
我在github上创建了一个简单的gh-pages分支,同时也在我的本地仓库中创建了该分支。我使用自动页面生成程序来创建了5个文件: images、javascripts、stylesheets、index.html和params.json。
我将这些内容拉到了我的本地仓库,并将js-markdown-extra.js添加到javascripts中,并编辑了index.html,用由markdown库创建的编译后的README.md替换了“content”部分。
放入一个虚拟的README.md文件,可以完美地工作。
我想简单地将我的本地主分支推送到(而不是覆盖)远程的gh-pages分支,而不修改这5个网站文件。
我没有找到一种方法来实现这个想法。根据http://oli.jp/2011/github-pages-workflow/的建议,我尝试使用git push -f origin master:gh-pages命令,但在测试仓库上失败了,导致出现404错误(推送本地gh-pages分支修复了这个问题)。
那么,有没有一种将主分支作为gh-pages的子集推送的方法?
如果没有,有没有一种简单的方式在本地合并主分支和gh-pages分支,而不删除这5个网站文件?
我知道如何“镜像”所有这些内容,使这5个文件出现在仓库中,但我想避免这种杂乱。

2
有一些方法可以同步主分支的子目录gh-pages分支,即该子目录的内容将定义gh-pages分支的外观,参见http://www.damian.oquanta.info/posts/one-line-deployment-of-your-site-to-gh-pages.html。这样做是否有帮助? - krlmlr
1
使用GitHub for MacGitHub for Windows是另一种选项,可以使分支合并和与GitHub.com同步变得非常简单。 - Joel Glovier
1
只是为了明确:我已经能够使用可爱的简单checkout/merge/push方法维护本地gh-pages分支。这样可以正确地保持gh-pages是唯一具有5个网站文件的分支,而主分支则不包含它们。问题在于如何在创建单个编辑/提交/推送以开始后,仅在github上维护gh-pages..不再与本地gh-pages分支搞混。 - backspaces
4个回答

31

据我所了解,您需要切换到本地的gh-pages副本。合并主分支(master),然后推送 gh-pages。

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

1
正如我所提到的,这也会将主分支上的任何其他内容合并到gh-pages中。在GitHub项目中,gh-pages通常与实际项目位于同一仓库中,只是相关网站,但没有与项目本身相关的源代码。只是提供信息,但我相信这就是需要完成的任务。 - Jed Schneider
3
太棒了!其他在谷歌排名较高的网站建议在 gh-pages 分支上执行一些无效的“git rebase master”操作,结果只会引起冲突和问题。非常感谢! - aaron-coding
1
将“git merge master”更改为“git rebase master”,如果只是克隆主分支完全相同的情况下。 - eQ19

12

如果我理解正确,似乎您在本地主分支上创建了虚拟Readme和其他文件,但是打算将它们放在gh-pages分支上。如果是这种情况,最安全的选择是将您的主分支合并到gh-pages分支中(假设您没有其他不想放在gh-pages分支上的文件)。建议使用命令git push -f origin master:gh-pages将您的本地主分支推送到gh-pages分支。关于into vs onto,我不太确定您的意思,因为在git中,分支名称只是指针。


5
我认为“onto”应该替换成“replace”,因为这是git push -f origin master:gh-pages的作用。 - stellarhopper
1
如上所述:将文件添加到 gh-pages 分支中,而 "onto" 意味着用主分支替换整个 gh-pages 分支。绝对不是期望的结果! - backspaces

2

这是一篇很好的文章Github Pages工作流程,我用它来理解如何在主分支和gh-pages分支之间进行交互。

谷歌的Paul Irish在另一篇文章的评论中推荐了它,它具有非常清晰的示例。


1
OP已经提到他们阅读了该链接 - Dan Dascalescu
2
@DanDascalescu 好的,我可能当时睡着了,但我已经添加了Paul Irish认可的部分;) - jamie

1
作为另一种方法,使用git subtree 作为你的gh-pages分支如何?
git checkout master
git subtree push --prefix . origin gh-pages

根据源代码上的git-subtree文档:
子树允许将子项目包含在主项目的子目录中,可选择包括子项目的整个历史记录。
在我们的情况下,我们可以将相同路径(根路径;.)别名为主分支的虚拟副本(尽管我没有测试过)。
顺便说一下,在遇到this gist之后,我发现了子树,由cobyism创建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接