如何防止git在每个git命令上要求sudo


11

我创建了一个目录/var/www来存储我的Web应用程序克隆目录。最初从GitHub克隆该应用程序时,它要求我使用sudo,并且每次执行此操作git pull都需要sudo。因此,我遇到了一些问题。例如,我的s​​sh密钥不匹配。因此,当我执行自己的操作时git pull,我必须使用HTTPS而不是ssh,并且每次我要提取和更新我的应用程序时都要手动输入用户名和密码。如何配置它,这样我每次使用git时都不必使用sudo?

Answers:


13

这里发生了几件事情:

  • 当您使用时sudo git checkout ...,所有这些文件均由root用户和root组拥有。使用标准权限,这就是为什么对这些文件进行后续更改要求您具有root用户的原因。

  • /var/www/默认情况下为www-data组所有。您的用户默认情况下不是。

写入的最简单方法/var/www/将您的用户添加到www-data组。当然,您可以将目录更改为用户拥有,但是如果您不抢先使用,可能会带来一些讨厌的连锁反应。

将用户添加到www-data组后,您需要重新登录。

具体来说,您将需要修复当前混乱的根拥有数据。您可以将其作为根用户删除(然后重新签出),但是如果您有未保存的工作,将所有内容都拉回到用户手中会更干净。以下示例非常懒惰,并假定我们正在谈论的是/ var / www /中唯一的内容:

sudo chown -R www-data: /var/www/

好的,最好只是sudo git checkout进入另一个目录,然后在/ var / www目录中部署我的应用程序吗?我只是在某处读到,将项目检入var目录通常不是一个好主意。一个人推荐的项目检查出到主目录
斯科特

2
这将是最好的,如果你停止运行git为根。为此。任何让您以root用户身份运行的计划都已失败。您所说的检入Web目录是正确的-向人们提供对您.git目录的访问权限可以使他们对您不希望其访问的内容具有访问权限,但是您可以防止访问.git/目录,从而减轻了整个问题。
奥利(Oli)

还有其他可接受的目录结构,您可以在网站上拥有一个存放非托管内容的存放目录(包括.git),并且在其中有一个公共目录,您可以告诉Apache托管该目录。在/ var / www /中保留一个网站的精神非常陈旧。
奥利

您有推荐的目录结构吗?基本上,我要结帐,然后将其捆绑到.tgz中。然后,我必须将其解压缩到节点应用程序中。顺便说一下,这是一个流星应用。我有点困惑在哪里保留这三个单独的文件夹/文件
Scott

@Scott我遇到了同样的问题。存储库中的后续子命令(以我为例)将调用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)

使用git remote set-url命令将远程URL从HTTPS更改为SSH。

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.