繁体   English   中英

Github:将 gh-pages 镜像到 master

[英]Github: Mirroring gh-pages to master

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

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

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

干杯

将以下 2 行添加到.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 项目

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

不要做上面 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@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送到:

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

默认。

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

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

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

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

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

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

提交送到master..

然后:

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

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


gh-pages分支用作 master 对我来说要容易得多。 “大师”没有什么神奇之处; 这只是另一个分支名称。 gh-pages一些神奇之处,因为这是 GitHub 正在寻找 index.html 为您的页面提供服务的地方。

我关于此主题的其他答案中阅读更多内容。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM