У меня есть каталог веб-сервера apache2 в виде каталога Git, поэтому, когда я и члены моей команды (школьный проект) вносим изменения в нашу папку GitHub, ее можно легко извлечь, запустив «git pull
» в шпатлевке.
Я хочу сделать это автоматически (используя WebHook), имея файл «pull.php
», внутри которого есть «<?php exec("git pull"); <?
».
Однако пользователь, который появляется, когда я запускаю функцию whoami
в php, это «www-data
».
Чтобы позволить www-data
работать git pull
без необходимости вводить учетные данные (я пытался настроить SSH, и он отказался работать), мне нужно разрешить им хранить учетные данные.
Это проблематично, потому что, в отличие от других пользователей, у www-data
нет каталога в /home/accountname
для сохранения .gitconfig
.
Как мне заставить "git credential.helper store
" работать на www-data
?
Я также не против иметь SSH, но я столкнулся с той же проблемой, когда в каталоге по умолчанию для сохранения файла id_rsa
указано, что разрешения нет / не существует, поэтому я бы предпочел, чтобы был дан ответ на предыдущий вопрос.
Обновлено: В конце концов, это было множество проблем. он пытался использовать HTTPS, потому что я клонировал его с помощью HTTPS. Короче говоря, я удалил репо и повторно клонировал его с помощью SSH, и все мои проблемы исчезли. Между ними было много шагов, но любой, у кого есть похожая проблема, может просто сделать это и пропустить головную боль, ха-ха.
У вас похожая проблема в WordOps/WordOps
#305
www-data user cannot write anything in
/var/www
because this directory's owner isroot
. So you can create the.gitconfig
file as root, and then change owner and permissions (following this recommendation) withchown www-data:www-data /var/www/.gitconfig chmod 644 /var/www/.gitconfig.
Or you can change
/var/www
directory owner (chown www-data /var/www
) to allowwww-data
to create files in this directory.
ОП КристианВагнер подтверждает, что клонирование репозитория с помощью SSH вместо HTTPS позволяет работать git pull
.
Сделав это и запустив «sudo -u www-data git config credential.helper store», а затем попытавшись «sudo -u www-data git pull» и заполнив учетные данные, я столкнулся с этим: фатальный: не удалось получить учетные данные блокировка хранилища: в доступе отказано, поэтому я не знаю, как это исправить - я столкнулся с этой проблемой ранее и попытался удалить кучу вещей, как было сказано в Интернете, и ничего не сработало.
Ах, ваш второй комментарий был исправлением! Мне нужно было сделать www-data владельцем каталога, чтобы иметь разрешения на файл хранилища для создания учетных данных. Вы только что помогли мне решить проблему, с которой у меня были проблемы в течение 7 часов, спасибо, ха-ха! (также спасибо за исправление моего поста, теперь он выглядит красиво, а не в беспорядке, как раньше)
@ChristianWagner Отлично, молодец! Рад, что был полезен.
... извините, что беспокою вас снова, но после того, как все это заработало, у меня все еще возникают проблемы с переводом моего php в автоматический "git pull"... мой веб-хук направлен на мойдомен.xyz/pull.php, а мой pull.php содержит "exec("sh -c cd /var/www/mydomain.com/public_html/351Project && git pull");" я также пробовал просто "git pull" и т. д., и ничего не работает. Каталог принадлежит www-data и "echo exec('whoami');" возвращает www-данные. Выполнение «sudo -u git pull» отлично работает в шпатлевке, но я не могу заставить его работать через webhook и php. Можете ли вы пролить свет на то, как правильно заставить это работать?
@ChristianWagner будет работать простой id -a && ls
в вашем php-файле? Просто чтобы проверить, работают ли более простые команды.
да, когда я добавляю "echo exec("id -a && ls");" он возвращает «welcome.php», когда я перехожу к mydomain.com/pull.php, который является файлом в том же каталоге, что и pull.php, поэтому некоторые команды выполняются, но я не думаю, что это правильно, лол
это то, что происходит, когда я захожу в каталог и запускаю команду, заданную из командной строки https://i.imgur.com/5Bbnu5t.png, которая сильно отличается от возврата «welcome.php», когда команда запускается с перехода на mydomain.com/pull.php ---> "добро пожаловать.php" || это информация из "ls -l" https://i.imgur.com/v8zNuPZ.png @VonC
@ChristianWagner Попробуйте протестировать этот обработчик веб-перехватчиков php: gist.github.com/slowkow/92f021272e760d10d111d7fb72679276
Давайте продолжить обсуждение в чате.
Можно ли вытащить репозиторий git по https?