从主分支镜像GitHub页面 - 主分支不更新

时间:2016-04-28 16:24:37

标签: git github github-pages

我想镜像我的GitHub页面分支以匹配主分支,因此每当我推送到origin master时,gh-pages分支都会自动同步并推送。

我遵循了如何执行此操作的教程,现在看来,每当我从主分支执行推送时,只有gh-pages分支正在更新。

我删除了本地和远程gh-pages分支,

git branch -D gh-pages        # delete local
git push -u origin :gh-pages  # delete remote

然后尝试从我的主分支,但得到以下错误:

> git checkout master
> git pull
> Your configuration specifies to merge with the ref 'refs/heads/gh-pages'
from the remote, but no such ref was fetched.

如果我推送我的主分支,它会重新创建gh-pages远程分支,但不会更新主分支......

在我的git配置文件中:

> git config -l
credential.helper=osxkeychain
user.name=Kyle
user.email=kyle@email.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
remote.origin.url=https://github.com/kylesb/range.js.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.push=+refs/heads/master:refs/heads/gh-pages
remote.origin.push=+refs/heads/master:refs/heads/gh-pages
branch.master.remote=origin
branch.master.merge=refs/heads/gh-pages

我该如何解决这个问题?

更新

我只需编辑.git / config文件并将其重置为以下原始内容即可解决此问题:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/<username>/<repository_name>.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "gh-pages"]
    remote = origin
    merge = refs/heads/gh-pages

现在我只需要手动推送gh-pages分支,一切都很好:

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

2 个答案:

答案 0 :(得分:0)

gh-pages被设置为尝试与master合并的默认分支,但它不再存在。

使用git config --unset branch.master.merge取消主控合并分支。

答案 1 :(得分:0)

首先,如果你使用的是git less版本2升级它,如果你可以从最高版本2到每个pull.push用于将全部更改的分支推送到远程,甚至是你不想推。

这是git v2.0发行说明,它解释了git处理推送方式的变化(简单与匹配)。

  

Git v2.0发行说明

     

向后兼容性说明

     

git push [$there]没有说要推送什么时,我们已经使用了   到目前为止传统的 matching 语义(所有分支都已发送   只要已经存在同名分支,就可以到远程控制台   在那边)。在Git 2.0中,默认值现在是simple语义,   推动:

     
      
  • 只有当前分支到同名的分支,并且只有   当前分支设置为与该远程集成时   分支,如果你正在推送到同一个遥控器;或

  •   
  • 只有当前分支到具有相同名称的分支,如果您   正在推送到一个不是你常去的地方的遥控器。

  •   
     

您可以使用配置变量push.default进行更改   这个。如果你是一个想要继续使用的老人   matching语义,您可以将变量设置为matching   例。阅读文档以了解其他可能性。

回答你的问题。

默认情况下,您可以将当前所在的分支推送到远程 由于您尝试推送不同的分支名称,因此当您在master分支时,不应该这样做 签出新的gh页面,然后推送到远程

# start from current master
git checkout master

# Checkout teh new gh-pages branch
git checkout -b gh-pages

# do a force push instead of deleting the branch
# the force will override and prevoius commits
git push -f gh-pages