我正在开发一个托管在 GitHub 上的 jQuery 插件。它包含一个演示,我手动复制并推送到分支gh-pages
,我想做的是拥有它,所以当我推送更改时master
它会自动推送到gh-pages
,或者至少是它们被镜像的设置.
我已经看过这个问题,但不确定它是否真的回答了我关于这些要求的问题:
- 我使用Tower,我不介意使用终端 (Mac) 来更改配置,只要该解决方案适用于此 GUI。
- 我只希望在某些存储库上“镜像”,而不是在我机器上的所有存储库上。
干杯
将以下 2 行添加到 的[remote "origin"]
部分.git/config
:
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 的答案添加进一步的解释。
如果你想在每次运行时都自动推送master
,你可能想在你的 repo 的 git 配置中添加一个 Refspec。gh-pages
git push origin
因此,根据git-scm book,您可以 通过向repo 配置文件添加两个值来添加两个RefSpecs:push
.git/config
[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
分支默认情况下。
注意:+
在规范之前使用 a 会导致强制推送到 repo。谨慎使用:
refspec 的格式是可选的
+
,后跟<src>:<dst>
, where<src>
是远程端引用的模式,并且<dst>
这些引用将在本地写入。告诉 Git 更新引用,+
即使它不是快进的。
我个人喜欢将其包装在别名中:
alias gpogh="git checkout gh-pages && git merge master && git push origin gh-pages && git checkout -"
这会将您的 master 镜像到gh-pages
,推送到 github,然后切换回您正在处理的上一个分支。
提交并推送到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
或者您可以只使用下面的 cmd,这会将您的本地 master 分支推送到 gh-pages master 分支。
git push -f origin master:gh-pages
更新:GitHub 现在允许从您想要的任何分支和目录发布页面。
gh-pages
将分支用作主控对我来说要容易得多。“大师”没有什么神奇之处;这只是另一个分支名称。gh-pages有一些神奇之处,因为这是GitHub 寻找 index.html 来为您的页面提供服务的地方。
在我关于此主题的其他答案中阅读更多内容。
用gh-pages
作主树也比子树更容易,子树比镜像更容易。您可以git subtree
按照此处或此处的说明使用:如果您有一个包含演示的目录,则可以gh-branch
使用一个命令将该目录推送到该目录。假设您为目录命名gh-pages
以使事情清楚。然后,在您提交更改并将更改推送到 之后master
,运行此命令以更新 gh-pages:
git subtree push --prefix gh-pages origin gh-pages
问题是您的文件是否gh-pages
引用了其外部其他目录中的文件。符号链接不起作用,因此您必须将文件复制到用作 gh-pages 的目录中。
如果您使用gh-pages
as master,则不会出现此问题。