从主分支构建到 gh-pages 分支

7
我想做的事情: 我正在使用Github。 我有两个分支:主分支和gh-pages分支。 我在主分支上有一个Unity3D项目。当我运行它时,它将生成一个网页。 我想在gh-pages分支上显示网页内容。
我认为这意味着我必须在存储库的两个分支之间共享一个文件夹。 这似乎几乎是不可能的。
有没有正确的方法来做到这一点?我当前的解决方案是创建两个Github项目,并从第一个项目构建到第二个项目。然后,我查看第二个项目的gh-page。这似乎非常繁琐。我应该能够在一个项目中完成所有这些工作。

哦,这是一个非常奇怪的情况...我会将网页处理在与这两个不同的分支上。 - Francesco Belladonna
我不指望做这件事情太久。迟早游戏会有自己的网站,但现在能够打开构建/提交并且没有其他麻烦地进行托管将是很棒的。 - tavoe
这里有一个可行的方法:"git checkout master WebPlayer/WebPlayer.unity3d"。从gh-pages运行它,它将拉取Web Player。现在,我能否自动化git在每次提交gh-pages之前运行该脚本? - tavoe
好的。有一个叫做git-hook的东西。如果我做...某事...我就可以让上面的脚本在我切换到gh-pages分支时运行。不幸的是,我对那个“某事”一无所知。我的当前计划是:1)进入“.git/hooks”并创建“post-checkout.bat”(我在Windows上,bat是否合适还是.txt或.sh?)。然后,我将脚本放在批处理文件中,当我切换到gh-pages时,它会复制我想要的文件。只是,它没有。有什么建议吗? - tavoe
1
请参考此问题的副本:https://dev59.com/eWkv5IYBdhLWcg3wdQdT#10591668 - jthill
4个回答

11

您可以在第一个存储库的工作目录结构中再次克隆您的存储库。 因此,在本地,您有这个文件夹结构:

project
|- .git/
|- .gitignore
|- (other project related files)
|- deploy/
   |- .git/
   |- (deployed files)

projectdeploy都是您项目的克隆存储库;deploy检出了gh-pages分支。外部的.gitignore文件明显列出了deploy/,因此该文件夹被忽略了。

现在,在部署时,您将所有文件发布到deploy文件夹中,然后进入该文件夹,执行git add .git commitgit push操作,生成的文件将被部署。

显然,这样做不会给您的主分支和gh-pages分支之间提供实际关联,但是两者将在同一存储库中完全独立存在。


1
这在一个相对流行的要点中讨论过(https://gist.github.com/chrisjacob/825950)。 - Dan Dascalescu

1

请查看非常棒的gh-pages npm模块。只需几行代码,例如:

var ghpages = require('gh-pages');
var path = require('path');
ghpages.publish(path.join(__dirname, 'dist'), function(err) { ... });

你将创建 gh-pages 分支,并将其推送到 GitHub!
更详细地说,在文档中:
调用此函数将创建当前存储库的临时克隆,如果不存在,则创建 gh-pages 分支,从基本路径复制所有文件,或仅复制与可选 src 配置匹配的模式,提交所有更改,并推送到 origin 远程。
它是超级可配置的,并且对我非常有效。

1

这类似于Jekyll的工作流程。假设unity3d内容生成到名为foo的文件夹中。将foo添加到.gitignore,然后执行以下操作:

git checkout master
<run unity3d>
git checkout gh-pages
git rm -qr .
cp -r foo/. .
rm -r foo
git add
git commit

示例


0

我想要将我的Doxygen文档从主分支推送到gh-pages“轻松”。

我阅读了类似的解决方案,但是我的眼睛都花了。

我的解决方案是:

  1. 源分支:将文件列在.gitignore中的“临时目录”
  2. 更改到gh-pages分支(保留.gitignore列出的目录)
  3. gh-pages分支:从临时目录同步到正确的目录
  4. gh-pages分支:'git add -u'适当位置目录
  5. gh-pages分支:'git commit'

这仍然需要手动运行更新和提交,如果您只从特定构建发布网站,则可能是一件好事。

示例(大多数是注释)位于:https://github.com/nekenyu/libBsdSockets/blob/gh-pages/update_doc.sh


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