我获得了不足的许可......'尝试在我的Linux AWS服务器上推送到我的裸仓库时出错

时间:2015-11-04 05:15:10

标签: linux git amazon-web-services push

更新(11/4): 只是为了测试一下我的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
~
~
~

在我的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

我已经进入我的服务器并尝试阅读Git Push Error: insufficient..问题,但不确定我需要授予哪些群组权限?我是否需要在我的AWS服务器上添加与我的开发箱上的组匹配的新组?

其他信息: 如果我不清楚,我正在尝试一个git push origin master'从我的本地开发盒到AWS linux服务器。推送来自我当地的DEV盒子,当我尝试推送时,我没有SSH进入我的AWS Linux盒子。

不确定这是否是必要的,但我的AWS Linux服务器具有IP规则,可防止任何源自我的IP地址的SSH连接。

2 个答案:

答案 0 :(得分:2)

(这个答案假设您使用ssh + git连接到存储库。)

当您按照ssh登录AWS时,请尝试键入id。这将为您提供您登录的用户的用户ID。当您找到它时,通过(在存储库内)

更改存储库的权限
chown -R user_id:user_id .

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

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

答案 1 :(得分:1)

在我的本地仓库(开发箱)上我做了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
~                                                                               
~                                                                               
~ 

从本地仓库(开发箱)我做了$ git remote -v返回:

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

此时我意识到我正在与“ec2-user'我已经将ssh指向我的.pem密钥,我可以通过简单地从' root'更改整个裸仓库的文件所有者(在我的AWS Linux盒子上)来解决我的权限问题。到了'ec2-user'。

在裸仓库目录中的我的AWS Linux上执行$ chown -R ec2-user .然后通过执行$ ls -la验证文件所有者确实从' root'到了'ec2-user'。

我的下一步是更新裸仓库的权限,所以我做了

chmod -R 770

它改变了我的权限,因此根组中的所有者和用户可以读取,写入和执行,但所有其他人都无法读取,写入和执行。我本可以完成700,因为ec2-user是所有者。

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

在完成所有这些之后,我能够从我的DEV盒子上的本地仓库和AWS Linux盒子中的仓库推送到我的裸仓库。

BTW:很好的小Linux permission calculator