git-remote:致命:使用post-receive钩子,您处于尚未出生的分支上

时间:2018-07-04 05:35:34

标签: git github githooks

因此,我尝试将github分支同步到网站的两个部分,理论上,github中的master分支应该与我的网站tinyweatherstation.com同步,而beta分支应该与{{ 3}},并且我已经成功地获得了与master分支一起使用的post-receive钩子,但是对于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

帖子接收挂钩看起来像这样...

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

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

2 个答案:

答案 0 :(得分:0)

  • 获取所有存储库:

    $ 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存储库的beta分支:

    $ git push live_beta beta
    

答案 1 :(得分:0)

错误消息来自推送目标(那里的Git)。鉴于您的接收后挂钩是简单的单行表达式:

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

这意味着Git生活在:

ssh://tinyweatherstation.com/var/www/beta.tinyweatherstation.com.git
正如错误消息所说,

是“在尚未诞生的分支上”。也就是说,该(可能是裸机)存储库的 current 分支具有一些名称,例如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所指向的名称,即,更改{{1上的当前分支的 name }}服务器:

tinyweatherstation.com

现在没有分支名称的server$ git symbolic-ref HEAD refs/heads/beta 将可以工作,因为名称git checkout -f指的是您之前推送的分支。

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