Сообщение об ошибке исходит от цели нажатия (Git там). Учитывая, что ваш хук после получения - простое однострочное выражение:
GIT_WORK_TREE=/var/www/beta.tinyweatherstation.com/html git checkout -f
это означает, что Гит живет по адресу:
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
), который на самом деле еще не существует.
Другой способ - создать имя ветки master
в этом хранилище Git (на сервере в 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
.