![](/img/trans.png)
[英]Git post-receive hook fails to checkout, fatal: You are on a branch yet to be born
[英]git - remote: fatal: you are on a branch yet to be born, using post-receive hook
因此,我尝试将github分支同步到网站的两个部分,理论上,我github中的master分支应该与我的网站tinyweatherstation.com同步,而beta分支应该与beta.tinyweatherstation.com同步,并且我已经成功地获得了后接收钩子与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
帖子接收钩看起来像这样...
#!/bin/sh GIT_WORK_TREE=/var/www/beta.tinyweatherstation.com/html git checkout -f
我已提交到此分支(测试版),所以我知道它在那里,所以请帮助...
获取所有存储库:
$ 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
错误消息来自推送目标(那里的Git)。 假设您的接收后挂钩是简单的单行表达式:
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存储库中(在服务器上的tinyweatherstation.com/var/www/beta.tinyweatherstation.com.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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.