繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM