Git分支: gh-pages

70

我在 GitHub 上有一个代码库,最近发现了 GitHub 的 Pages 功能,想要使用它们。
我想创建一个新分支,并在需要时,可以在 master 分支或 gh-pages 分支上提交。

我该如何操作?我需要在我的代码库中创建另一个文件夹吗?


origin 不是一个分支,它是一个远程仓库。你的意思是 master - Dustin
啊是的,你说得对。我会编辑的。 - rubik
请参考我的相关答案文章,这篇文章提供了一种解决方案,即在工作副本的子目录中创建一个克隆。 - krlmlr
2
不再需要一个gh-pages分支 - Dan Dascalescu
@DanDascalescu为什么不在这里的所有评论之外发表自己的答案呢?你的链接是什么意思,它链接到这个问题吗? - Timo
1
@Timo:我明白你为什么感到困惑。实际上,我在这里发布了一个答案,链接指向那个答案(请注意#后面的锚点ID),但是@Martijn Pieters 删除了它,而SE一再拒绝实施有关已删除答案的通知,所以我不知道它被删除了。无论如何,这里的另一个答案仍然指向更简单的方法,只需告诉GitHub从哪个文件夹提供页面即可;不需要特殊分支。 - Dan Dascalescu
9个回答

42

最近的git版本有一种替代git symbolic-ref方法的方式,可以避免使用更低级的命令。

git checkout --orphan gh-pages
git rm -rf .

我不明白这个。这跟symbolic-ref有什么关系吗? - cregox
以前唯一的方法是使用 git symbolic-ref,就像 Chandru 的回答中所示。现在 git checkout --orphan 是正确的方法。 - Arrowmaster
那么,orphan 实际上是采用孤儿而不是创建孤儿,对吗?并且它和 symbolic-ref 做的事情是一样的,只是我们需要调用它?通过一个好的例子来解释可能会更容易些。 - cregox
4
--orphan参数接收一个起点(如果未指定,则为HEAD),并从该点创建一个没有历史记录的新分支。我答案中额外使用的git rm -rf .是为了在您希望分支完全没有内容时删除先前的内容。当您运行git symbolic-ref HEAD refs/heads/gh-pages 且gh-pages尚不存在时,它将使存储库处于类似于git init之后但在第一次提交之前的状态,因此以下提交将不会有父级。 --orphan是针对symblic-ref的特定用例而添加的,但并不替代其他用途。 - Arrowmaster
@Cawas 不,这里没有符号链接,那是旧的方法。进入一个存储库并尝试cat .git/HEADcat .git/refs/heads/master。这些文件是由git symbolic-ref创建的。第一个通常只引用另一个(除非您有一个分离的HEAD),而另一个将指向特定的提交SHA1。 - Arrowmaster
显示剩余5条评论

34

1
@rubik 实际上最好使用同一作者的第二个建议:https://gist.github.com/833223 - cregox
1
GitHub 刚刚启用任何分支和目录作为文档源,详情请见此链接。您不再需要使用 gh-pages - Dan Dascalescu
@DanDascalescu 这不是真的。截至2020年4月,您只能使用主分支、主分支的文档文件夹或gh-pages。不是“任何”分支。这些是唯一的三种可能性。 - Vadorequest

13

在您的本地克隆中,执行以下操作:

git symbolic-ref HEAD refs/heads/gh-pages
rm .git/index 
git clean -fdx

接着,运行git checkout gh-pages并撰写你的页面。当你准备好发布页面时,运行git push origin gh-pages


是的,但我应该把我的页面放在哪里?Git如何知道要将哪些页面放在gh-pages中? - rubik
3
git checkout gh-pages 的意思是你已经切换到名为“gh-pages”的分支。你提交到这个分支的任何更改都会被 GitHub 捕捉并用于构建你的 GitHub 页面。要切换回“master”分支(可能是你的源代码),请执行 git checkout master - Chandra Sekar
请创建一个远程存储库中的Git符号引用。 - cregox
1
GitHub 刚刚启用了 任何分支和目录作为文档源。您不再需要使用 gh-pages - Dan Dascalescu

4
您的问题还有另一个解决方案:忘记gh-pages和分支;将应该被服务的静态文件放在/docs目录中,然后进入您的项目设置并告诉Github服务于/docs内容。
更多信息请查看这里

1
我从 Elm 代码生成 JavaScript,并且不希望 JavaScript 污染我的代码存储库。目前这是我用于部署的脚本 https://github.com/rofrol/closeyoureyesnow/blob/master/build_and_deploy.sh - rofrol

2
发布一个像这样的静态网站:
git subtree push --prefix www origin gh-pages

其中www是您静态文件所在的文档根目录。 您的静态网站现在已经上线,网址为: https://[user_name].github.io/[repo_name]/


对我来说不起作用。我得到了reset gh-pages branch to master ...\nfatal: Refusing to fetch into current branch refs/heads/gh-pages of non-bare repository\nfatal: the remote end hung up unexpectedly。我使用了这个git push origin `git subtree split --prefix build`:$DEPLOY --force https://github.com/rofrol/closeyoureyesnow/blob/master/build_and_deploy.sh - rofrol

1

1

1

典型的方法是切换分支:git checkout master 如果你想在主分支上工作,git checkout gh-pages 如果你想在gh-pages上工作。

从git 2.5开始,您可以同时检出两个分支(在不同的目录中)。请参见https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows。通过git worktree add -b gh-pages ../gh-pages origin/gh-pages进行设置。

奖励:如果您的master检出的子目录的内容是gh-pages的内容,请使用提供的脚本https://github.com/X1011/git-directory-deploy


1
你的 gh-pages 分支和 master 分支有完全相同的文件夹结构吗?如果是这种情况,为什么还要使用两个分支呢?只需要维护一个 gh-pages 分支就可以了!但如果你出于某些原因想要同时拥有这两个分支,并且它们始终保持同步,那么最好的方法是使用 git rebase。请参阅此处: http://lea.verou.me/2011/10/easily-keep-gh-pages-in-sync-with-master/ 你也可以使用特殊用例的 git checkout,从 master 中挑选你需要的文件并将它们推送到 gh-pages。请参阅此处: http://oli.jp/2011/github-pages-workflow/#gh-pages-workflow http://nicolasgallagher.com/git-checkout-specific-files-from-another-branch/ 我曾经遇到同样的问题,发现 gh-pages 的代码库通常与 master 不同。换句话说,gh-pages 只应包含项目的 dist/build/publish 文件夹中的内容,而 master 将包括您的配置文件、未压缩的脚本和样式等。
我的建议是将 gh-pages 创建为一个孤立分支,并仅在其中包含准备发布的材料。您需要从不同的本地目录克隆自己的主分支,使用 git checkout --orphan gh-pages 创建 gh-pages,然后使用 git rm -rf . 删除所有不必要的文件。从那里,您可以添加您的仅发布文件并推送到 gh-pages。 有关更多信息,请参阅 Github 文档:
https://help.github.com/articles/creating-project-pages-manually/

3
GitHub刚刚启用了使用任何分支和目录作为文档来源的功能。您不再需要使用gh-pages - Dan Dascalescu

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