git - remote: fatal: 你在一个尚未诞生的分支上,使用 post-receive hook
git - remote: fatal: you are on a branch yet to be born, using post-receive hook
所以我正在尝试将 github 分支同步到我网站的两个部分,理论上是我 github should be synced with my website tinyweatherstation.com and the beta branch should sync with beta.tinyweatherstation.com 中的 master 分支,并且我已成功获得 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
我已经提交到这个分支(测试版)所以我知道它在那里,所以请帮助...
获取所有存储库:
$ 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
错误消息来自推送目标(那里的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
正如错误消息所说,"on a branch yet to be born"。也就是说,该(大概是裸)存储库的 current 分支有一些名称,例如 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
。有多种方法可以做到这一点:例如,您可以登录那台机器,导航到裸存储库,然后使用 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
.
所以我正在尝试将 github 分支同步到我网站的两个部分,理论上是我 github should be synced with my website tinyweatherstation.com and the beta branch should sync with beta.tinyweatherstation.com 中的 master 分支,并且我已成功获得 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
我已经提交到这个分支(测试版)所以我知道它在那里,所以请帮助...
获取所有存储库:
$ 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
错误消息来自推送目标(那里的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
正如错误消息所说,"on a branch yet to be born"。也就是说,该(大概是裸)存储库的 current 分支有一些名称,例如 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
。有多种方法可以做到这一点:例如,您可以登录那台机器,导航到裸存储库,然后使用 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
.