Как запретить git требовать sudo в каждой команде git?

11

Я создал каталог /var/wwwдля хранения своего клона веб-приложений. Когда я изначально клонировал приложение из GitHub, мне требовалось использовать sudo, и каждый раз, когда я это делал git pull, требовалось sudo. Я сталкиваюсь с некоторыми проблемами из-за этого. Например, мои ключи ssh не совпадают. Поэтому, когда я делаю это git pull, мне приходится использовать HTTPS вместо ssh и вручную вводить свое имя пользователя и пароль каждый раз, когда я хочу получить и обновить свое приложение. Как мне это настроить, чтобы мне не приходилось использовать sudo каждый раз, когда я использую git?

Скотт
источник

Ответы:

13

Здесь происходит несколько вещей:

  • Когда вы sudo git checkout ..., все эти файлы принадлежат пользователю root и корневой группе. Со стандартными разрешениями, поэтому последующие изменения этих файлов требуют, чтобы вы были пользователем root.

  • /var/www/по умолчанию принадлежит www-dataгруппе. Что-то ваш пользователь не по умолчанию.

Самый простой способ написать это /var/www/- просто добавить своего пользователя в группу www-data . Конечно, вы можете изменить каталог, который будет принадлежать вашему пользователю, но это может иметь некоторые неприятные эффекты, если вы их не используете.

После добавления вашего пользователя в группу www-data вам необходимо будет повторно войти в систему.

В вашем конкретном случае вам нужно будет исправить текущую неразбериху с данными root. Вы можете удалить его как суперпользователь (и повторно оформить заказ), но если у вас есть несохраненная работа, будет просто чище вернуть все пользователю. Следующий пример чрезвычайно ленив и предполагает, что мы говорим только об / var / www /:

sudo chown -R www-data: /var/www/
Оли
источник
Хорошо, было бы лучше просто перейти sudo git checkoutв другой каталог, а затем развернуть мое приложение в каталоге / var / www? Я просто где-то читал, что начинать проекты в каталог var, как правило, не очень хорошая идея. Один человек порекомендовал проверить проекты в домашнем каталоге
Скотт
2
Было бы лучше, если бы вы перестали запускать git от имени пользователя root. Стремитесь к этому. Любой план, из-за которого вы запускаете его как root, уже провалился. То, что вы говорите о входе в веб-каталог, является правильным: предоставление людям доступа к вашему .gitкаталогу может дать им доступ к вещам, к которым вы не хотите предоставлять доступ, но вы можете запретить доступ к .git/каталогу, который смягчает всю проблему.
Оли
Существуют также другие приемлемые структуры каталогов, в которых у вас есть каталог хранения для вашего веб-сайта, куда помещаются не размещенные материалы (включая ваш .git), и внутри которого есть каталог public /, который вы указываете Apache для размещения. Идея хранения одного сайта в / var / www / очень архаична.
Оли
У вас есть рекомендуемая структура каталогов? По сути, у меня есть проверка, а затем я должен связать это в .tgz. И тогда я должен распаковать это в приложение узла. Кстати, это метеорное приложение. Я немного растерялся, где хранить эти три отдельные папки / файлы
Скотт,
@ Скотт Я столкнулся с этой же проблемой. Последующие подкоманды в репо (в моем случае) будут вызывать git и пытаться клонировать другие репо. Решением перекомпоновки ключей SSH, как вы заявили, было начало процесса без использования sudo. Многие из этих вопросов и обсуждений - обходной путь, который, вероятно, заставит вас ударить стены в будущем.
Джордан Стефанелли
0

Хм, поменять владельца папки? Я переместил свою папку www в / home / username, вы можете изменить ее местоположение в / etc / apache2 / sites-enabled / 000-default

мишель
источник
Так это связано с каталогом, в котором я храню свой клон?
Скотт
Да, точно. По умолчанию /var/wwwне может быть написано.
Joyfulgrind
0

Я немного опоздал с этим ответом, но обнаружил, что во избежание ввода пароля каждый раз мне приходилось менять репо с https на ssh.

Из раздела справки Github.com:

Команда git remote set-url изменяет существующий URL удаленного репозитория.

Откройте Терминал.

Измените текущий рабочий каталог на ваш локальный проект.

Перечислите существующие пульты, чтобы получить название пульта, который вы хотите изменить.

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

Измените URL вашего пульта с HTTPS на SSH с помощью команды git remote set-url.

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

Убедитесь, что удаленный URL-адрес изменился.

git remote -v

# Проверьте новый удаленный URL

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
jonnyjandles
источник