更新(11/4):只是为了testing,看看它是否确实是我的Linux机箱的权限问题,
当我尝试推送到我的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许可计算器 。