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