当我尝试推送到我的Linux AWS服务器上的裸露回购时,出现“权限不足”错误

更新(11/4):只是为了testing,看看它是否确实是我的Linux机箱的权限问题,

在AWS Linux裸回购中,我做了一个“sudo chmod -R 777”。 并成功地完成了“git push origin master”,我立即做了一个“sudo chmod -R 770”。 更改权限回来。

当我尝试推送到我的Linux AWS服务器上的裸露回购时,出现“权限不足”错误。

$ git push origin master Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 622 bytes | 0 bytes/s, done. Total 4 (delta 3), reused 0 (delta 0) remote: error: insufficient permission for adding an object to repository database objects remote: fatal: failed to write object error: unpack failed: unpack-objects abnormal exit To awsDev:/AWSbareRepo ! [remote rejected] master -> master (unpacker error) error: failed to push some refs to 'awsDev:/AWSbareRepo' 

我可以拉,但不能推。 我已经做了一个'git ls-remote',并且远程存储库中的可用引用以及关联的提交ID很好,所以连接不是问题。

我还在.config文件中将core.sharedRepository设置为true:

 [core] repositoryformatversion = 0 filemode = true bare = true sharedRepository = true ~ ~ ~ 

在裸露的repo目录上,我的AWS Linux服务器上执行“ls -la”,并收到以下内容:

 $ ls -la total 40 drwxr-xr-x 7 root root 4096 Nov 4 04:56 . dr-xr-xr-x 28 root root 4096 Oct 14 02:06 .. drwxrwsr-x 2 root root 4096 Apr 16 2015 branches -rwxrwSr-- 1 root root 91 Nov 4 04:56 config -rw-rwSr-- 1 root root 73 Apr 16 2015 description -rw-rwSr-- 1 root root 23 Apr 16 2015 HEAD drwxrwsr-x 2 root root 4096 Apr 16 2015 hooks drwxrwsr-x 2 root root 4096 Apr 16 2015 info drwxrwsr-x 12 root root 4096 Oct 14 03:21 objects drwxrwsr-x 4 root root 4096 Apr 16 2015 refs 

我已经ssh'd到我的服务器,并试图读Git推错误:不足..问题,但不知道我需要给予权限的组? 我需要在我的AWS服务器上添加一个与我的开发盒上的组相匹配的新组?

附加信息:如果我不清楚,我正在尝试从我的本地开发箱到AWS Linux服务器的“git push origin master”。 推送是从我的本地DEV框,当我尝试推我没SSH'd到我的AWS Linux框。

不知道这是否是必要的,但我的AWS Linux服务器有IP规则,它阻止任何不是源自我的IP地址的SSH连接。

(这个答案假设你使用ssh + git连接到版本库。)

当您通过ssh登录到AWS时,尝试输入id 。 这会给你登录的用户的用户名。 当你发现这个问题的时候,通过(在仓库中)修改仓库的权限

 chown -R user_id:user_id . 

这会将存储库中所有文件的所有权更改为您登录的用户。 ( :user_id改变了组的所有权)

说明:您的存储库由root拥有。 除非你也以root身份登录,否则你将没有写权限。

在我的本地回购(开箱)我做了一个vim ~/.ssh/config返回:

 Host awsDev HostName ec2-01-23-45-678.us-west-2.compute.amazonaws.com User ec2-user IdentityFile /Users/MyName/Desktop/AWSFolder/MyAWSPemKey.pem ~ ~ ~ 

从本地回购(Dev框)我做了一个$ git remote -v返回:

 origin awsDev:/AWSbareRepo (fetch) origin awsDev:/AWSbareRepo (push) 

在这一点上,我意识到我正在连接'ec2-user',并且我已经将ssh指向了我的.pem键,我可以通过简单地更改整个裸回购的文件所有者(在我的AWS Linux上)来解决我的权限问题,从“根”到“ec2-user”。

在裸露的repo目录中,我的AWS Linux框上做了一个$ chown -R ec2-user . 然后通过执行$ ls -la来验证文件所有者是否确实从“root”更改为“ec2-user”。

我的下一步是更新裸露回购的许可,所以我做了一个

 chmod -R 770 

这改变了我的权限,所以root组中的所有者和用户可以读,写和执行,但其他所有者不能。 我本来可以做700,因为ec2用户是所有者。

我再次做了$ ls -la,并且验证的权限是正确的。

毕竟,我能够从我的本地软件仓库和AWS Linux仓库中的仓库中推回我的裸仓库。

顺便说一句:好的Linux许可计算器 。