Я провел последние несколько дней, пытаясь настроить Git Remote на моем сервере, чтобы я мог отправлять на него изменения на моем веб-сервере. Проблема в том, что при этом я получаю следующие ошибки:
$ git push --porcelain --progress --recurse-submodules=check live refs/heads/master:refs/heads/master
'master' pushed: d689cce..4e755fc
Delta compression using up to 4 threads.
Total 3 (delta 2), reused 0 (delta 0)
remote: error: unable to create file .gitignore (Permission denied)
remote: error: unable to create file .gitignore~ (Permission denied)
remote: error: unable to create file index.js (Permission denied)
remote: error: unable to create file package.json (Permission denied)
Теперь я понимаю, что это как-то связано с владением файлами и папками, и что я и / или git могут иметь или не иметь права на запись в определенные папки.
Проблема в том, что я не имею ни малейшего понятия, в какую папку я не могу писать и как ее решить.
Я новичок в том, чтобы возиться с настройкой веб-сервера с нуля, поэтому вот что я сделал:
я прошел сквозь Как настроить автоматическое развертывание с помощью Git с VPS чтобы попробовать и посмотреть, как мне запустить и запустить пульт. Это привело меня к созданию следующих двух папок: /var/repo/site.git
и /var/www/website
.
Ничего не сказав о разрешениях, я пошел дальше и попытался нажать на удаленный, как было сказано, сразу же натолкнувшись на первое препятствие для разрешения.
Поэтому я посоветовался с другом, который посоветовал мне создать новую группу, добавить в нее своего пользователя, а затем /var/repo
принадлежать указанной группе с 775
права на чтение / запись / выполнение. Он также посоветовал мне поступить так, как было предложено Вот чтобы убедиться /var/www
папка имела нужные разрешения; но даже после всего этого я все еще не могу нажать на пульт, как показано в ошибке выше.
Итак, что мне делать, чтобы это исправить? Я здесь как бы на преграде.
Некоторая информация о вещах, которые я использую:
Проблема не в доступе для записи в / var / repo - я считаю, что из ошибок, которые вы скопировали / вставили, он настроен правильно и, вероятно, всегда был.
Проблема в отсутствии прав на запись в / var / www.
Следуя инструкциям, которые вы связали с тем, что вы настроили, это скрипт, который автоматически принимает файлы, которые вы отправляете, в репозиторий git на сервере и публикует их в / var / www. На мой взгляд, это разумный подход, но этот скрипт (который находится в файле / var / repo / hooks / post-receive) запускается так же, как и тот, который отправляет в репозиторий git. У этого пользователя нет разрешения на запись в / var / www
Предполагая, что вы уже выполнили шаги из предыдущего ответа, эти две дополнительные команды должны исправить ситуацию:
chown -R root:git-users /var/www/
chmod -R g+rw /var/www/
Поскольку вы сказали в комментариях, что пользователи нажимают на git через свои username@server
, вам необходимо убедиться, что у всех пользователей git есть разрешения на чтение и запись в репозиторий.
Добавьте всех пользователей в общую группу, которая называется, скажем, git-users
.
groupadd git-users
Теперь добавьте каждого пользователя git в группу:
usermod -a -G git-users <username>
Теперь измените группу владения для репозитория git:
chown -R root:git-users /var/repo/
Теперь установите разрешения, чтобы группа могла читать и записывать в репо:
chmod -R g+rw /var/repo/
Теперь любой член группы git-users
имеет доступ для чтения и записи.
Теперь нам нужен setgid
бит только для каталогов:
find /var/repo/ -type d -exec chmod g+s {} \;
Кроме того, вам необходимо включить sharedRepository
настройка в удаленной конфигурации git:
[core]
sharedRepository = true