Назад | Перейти на главную страницу

Проблемы с разрешениями при отправке на Git Remote

Я провел последние несколько дней, пытаясь настроить 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