【问题标题】:git - remote: fatal: you are on a branch yet to be born, using post-receive hookgit - 远程:致命:你在一个尚未出生的分支上,使用接收后挂钩
【发布时间】:2018-12-12 11:11:03
【问题描述】:

所以我正在尝试将 github 分支同步到我网站的两个部分,理论上我的 github 中的主分支应该与我的网站 tinyweatherstation.com 同步,而 beta 分支应该与 beta.tinyweatherstation.com 同步,我已经成功地让 post-receive 钩子与 master 分支一起工作,但是当它用于 beta 分支时:

git remote add live_beta ssh://wesley@tinyweatherstation.com/var/www/tinyweatherstation.com.git
git push live_beta +beta:refs/heads/beta

我得到错误:

    Enter passphrase for key '/c/Users/WesleyN/.ssh/id_rsa':
Counting objects: 999, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (967/967), done.
Writing objects: 100% (999/999), 5.04 MiB | 529.00 KiB/s, done.
Total 999 (delta 360), reused 0 (delta 0)
remote: Resolving deltas: 100% (360/360), done.
remote: fatal: You are on a branch yet to be born
To ssh://tinyweatherstation.com/var/www/beta.tinyweatherstation.com.git
 * [new branch]      beta -> beta

post 接收钩子看起来像这样...

#!/bin/sh GIT_WORK_TREE=/var/www/beta.tinyweatherstation.com/html git checkout -f

我已经提交了这个分支(测试版),所以我知道它在那里,所以请帮助...

【问题讨论】:

  • 错误来自 post-receive 钩子。但是,在您向我们展示实际的 post-receive 挂钩之前,我们只能猜测发生了什么。
  • 我用接收钩子编辑了帖子

标签: git github githooks


【解决方案1】:
  • 获取所有存储库:

    $ git remote add live_beta ssh://wesley@tinyweatherstation.com/var/www/tinyweatherstation.com.git
    $ git fetch --all
    
  • 使用远程的beta 分支历史创建并签出到beta 分支(确保不存在本地beta 分支):

    $ git checkout beta
    
  • 推送到live_beta repo 的beta 分支:

    $ git push live_beta beta
    

【讨论】:

    【解决方案2】:

    错误消息来自推送的目标(那里的 Git)。鉴于您的 post-receive 钩子是简单的一行表达式:

    GIT_WORK_TREE=/var/www/beta.tinyweatherstation.com/html git checkout -f
    

    这意味着 Git 生活在:

    ssh://tinyweatherstation.com/var/www/beta.tinyweatherstation.com.git
    

    正如错误消息所说,“在尚未诞生的分支上”。也就是说,该(可能是裸机)存储库的 当前 分支有一些名称,例如 master,但该分支名称尚不存在。

    有多种解决方案。一种是选择一个明确的分支来检查:

    GIT_WORK_TREE=/var/www/beta.tinyweatherstation.com/html git checkout -f beta
    

    这样,这个特定的 Git 知道使用名称 beta 而不是它当前的分支(同样,可能是 master——从这里开始,我假设它 master) 实际上还不存在。

    另一种方法是在该 Git 存储库中创建分支名称master(在服务器上tinyweatherstation.com/var/www/beta.tinyweatherstation.com.git)。有多种方法可以做到这一点:例如,您可以登录该机器,导航到裸存储库,然后使用 git branch 使名称 master 指向任何现有提交,现在有一些提交在存储库中。或者,在您的客户端计算机上,您可以执行另一个 git push,但这一次,执行一个推送到名称 master 的操作:

    client$ git push live_beta master
    

    (假设您希望服务器的 master 指向与您的客户端的 master 指向的相同提交)。

    还有一种方法是登录服务器并更改其HEAD象征性指向的名称,即更改tinyweatherstation.com服务器上当前分支的名称

    server$ git symbolic-ref HEAD refs/heads/beta
    

    现在没有分支名称的 git checkout -f 将起作用,因为名称 beta 指的是您之前推送的分支。

    请注意,使用git checkout -f beta 作为副作用,设置当前分支beta

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多