Git: Пользователь-> Сервер-> перехват post rec-> отправка на действующий сервер «Фатальный: пустой идентификатор(нет)) не разрешен» при нажатии, несмотря на установленный идентификатор

#git #permissions #githooks #git-config

#git #разрешения #githooks #git-config

Вопрос:

Я получаю эту ошибку:

Архитектура и рабочий процесс выглядят так:

1) разработчик переходит к удаленному репозиторию (dev server) через ssh-> 2) У Dev-сервера есть перехват post receive, который вызывает скрипт bash на реальном сервере через ssh->

 #!/bin/bash
while read oldrev newrev refname
do


    branch=$(git rev-parse --symbolic --abbrev-ref $refname)

    # Use this if-sentence to only update live server if branch is the wanted branch, e.g. master or stable
    if [[ "desarrollo" == "$branch" ]]; then
            # Fetch this branch from live-server
            ssh push@mpdvsweb-test.jusbaires.gov.ar '/bin/gitmirror'
    fi
done
  

3) Живой сервер выполняет скрипт, который извлекает данные с сервера разработки ->

 #!/bin/bash

cd /var/www/penal_test_git
git fetch git-repo
git merge -m 'Overwriting live server' -s recursive -X theirs git-repo/desarrollo
  

4) Я получаю следующую ошибку на компьютерах каждого разработчика (для нас установлен git config —global, но он не работает, я также попытался установить его для репозитория, и он тоже не работает)

введите описание изображения здесь

что может быть ошибкой?

git config --local -l возвращает user.name и user.email и git config -l возвращает user.name и user.email дважды, возможно, один из них локальный, а другой глобальный. На другом компьютере разработчика глобальный является единственным установленным и тоже не работает

Ответ №1:

Я решил это, я изменил три вещи, и это сработало. Сначала я удалил идентификатор локального репозитория, а затем переопределил глобальную конфигурацию (я не знаю, повлияло ли это на ситуацию, потому что у меня уже была правильно настроена глобальная конфигурация). Затем мне пришлось изменить bash на моем реальном сервере на fetch —all, в противном случае без этого флага это приводит к конфликтам слияния, если кто-то редактирует файлы на реальном сервере напрямую, потому что, когда выполняется перехват сервера разработчиков, это не позволит произойти слиянию, таким образом, все переопределяется:

 #!/bin/bash

cd /var/www/penal_test_git

git fetch --all
git reset --hard git-repo/desarrollo
  

Наконец, у файлов было разрешение пользователя root вместо www-data, потому что другой разработчик изменил его, и это не позволило переопределить файл с помощью выборки. Это часть другой ошибки, но она помогла заставить ее работать.