git - remote: fatal: вы находитесь на ветке, которая еще не родилась, используя пост-получение - PullRequest
0 голосов
/ 04 июля 2018

Поэтому я пытаюсь синхронизировать ветки github с двумя частями моего веб-сайта, теоретически основная ветка в моем github должна быть синхронизирована с моим веб-сайтом tinyweatherstation.com и бета-версией. ветвь должна синхронизироваться с beta.tinyweatherstation.com , и я успешно получил хук пост-получения, работающий с главной веткой, но когда это для бета-ветви:

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

Я добавил в эту ветку (бета), поэтому я знаю, что она есть, поэтому, пожалуйста, помогите ...

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Сообщение об ошибке исходит от цели нажатия (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.

0 голосов
/ 04 июля 2018
  • Получить все хранилище:

    $ 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
    
...