我花了几天的时间尝试在我的服务器上build立一个Git Remote,所以我可以把更改到我的Web服务器上。 问题是我在做这件事时遇到以下错误:
$ 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可能有或没有对某些文件夹的写入权限。
麻烦的是我没有哪个文件夹我无法写入或如何解决它的最微弱的线索。
我是全新的搞乱从头开始build立一个networking服务器,所以这就是我所做的:
我经历了如何设置与Git与VPS自动部署尝试,看看我应该如何让远程启动和运行。 这导致我创build以下两个文件夹: /var/repo/site.git
和/var/www/website
。
没有被告知有关权限的任何信息,我继续前进,试图按照提示推送到远程,立即运行到第一个权限障碍。
所以我咨询了一个朋友,他build议我应该创build一个新组,将我的用户添加到组中,然后让拥有775
读/写/执行权限的组拥有/var/repo
。 他还build议我应该这样做,以确保/var/www
文件夹具有正确的权限; 但即使如此,我仍然无法推送到远程,如上面的错误所示。
那么我该怎么做才能解决这个问题呢? 我在这里有一个路障。
关于我使用的东西的一些信息:
这个问题不在/ var / repo上写访问 – 我相信你复制/粘贴的错误,这是设置正确,可能总是。
这个问题是/ var / www上的写权限不足。
通过按照你已经链接到你已经build立的是一个脚本自动把你推送到服务器上的git存储库的文件,并在/ var / www发布它们的脚本。 在我看来,这是一个明智的方法,但是脚本(位于/ var / repo / hooks / post-receive文件中)正在以相同的方式运行,这会推送到git存储库。 该用户似乎没有写入/ var / www的权限
假设你已经按照上一个答案的步骤,这两个附加的命令应该把事情做好:
chown -R root:git-users /var/www/ chmod -R g+rw /var/www/
既然你在评论中说过用户通过他们的username@server
来推送git,你需要确保所有的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 {} \;
另外,您需要在远程gitconfiguration中启用sharedRepository
设置:
[core] sharedRepository = true