因此,我尝试将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
我已经提交了此分支(测试版),所以我知道它在那里,所以请帮助...
答案 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
。