设置到ec2的git部署过程

设置到ec2的git部署过程,git,ssh,amazon-ec2,deployment,Git,Ssh,Amazon Ec2,Deployment,我遵循了以下步骤:将git部署过程设置到ec2实例 我用配置文件中的~/.ssh/主机仔细地完成了ssh进入ec2机器的所有步骤。创建裸git回购。添加post-receivehook脚本等 在本地,我进行一些更改,提交。 然后,我用git remote add deploy ec2:/home/ec2 user/ab site添加了ec2repo(ab site是我刚刚初始化的裸git repo,ec2是我在~/.ssh/config文件中本地设置的ssh别名) 然而,当我使用git-push

我遵循了以下步骤:将git部署过程设置到
ec2
实例

我用配置文件中的
~/.ssh/
主机仔细地完成了ssh进入
ec2
机器的所有步骤。创建裸git回购。添加
post-receive
hook脚本等

在本地,我进行一些更改,提交。
然后,我用git remote add deploy ec2:/home/ec2 user/ab site添加了
ec2
repo(ab site是我刚刚初始化的裸git repo,
ec2
是我在
~/.ssh/config
文件中本地设置的ssh别名)

然而,当我使用
git-push-deploy+master:refs/heads/master

我犯了很多错误

warning: core.bare and core.worktree do not make sense remote:
warning: core.bare and core.worktree do not make sense 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
所以我很好奇接下来我应该看什么来解决这个问题

core.bare和core.worktree没有意义

这是一个警告。如果该警告位于远程端,则表示core.bare设置为true,而worktree也设置为true

通常的修复方法是
git config--unset core.worktree
,但在您的情况下

bare=false时,它工作正常


然后,您可以再次检查权限问题。

您的问题包含警告和错误

  • 警告

    警告:core.bare和core.worktree没有意义: 警告:core.bare和core.worktree没有意义远程:错误:

  • 解决方案

    cd repository/.git
    
    sudo chmod -R g+ws *
    sudo chgrp -R mygroup *
    
    git config core.sharedRepository true
    
    裸存储库是只读存储库。bare repo最常见的用例是创建远程中央Git存储库

    因此git打印“致命:core.bare和core.worktree没有意义”错误消息。因此,您需要在回购的配置文件中设置
    bare=false

    cd barerepo
    git config --bool core.bare false
    git config --path core.worktree /var/www/mywork
    
  • 误差

    权限不足,无法将对象添加到存储库数据库

    ./objects remote:致命:写入对象失败错误:解包失败:解包对象异常退出

  • 解决方案

    cd repository/.git
    
    sudo chmod -R g+ws *
    sudo chgrp -R mygroup *
    
    git config core.sharedRepository true
    

    “将对象添加到存储库数据库的权限不足”-错误消息的这一部分说明问题。我会首先检查以确保您的ec2用户(在本例中可能是
    ubuntu
    )具有写入存储库的权限。我对这一切的理解是,我正在创建一个
    bare
    git回购,因为这是唯一可以推送的回购类型。因为我的目标是将我的网站推送到我的服务器,并在push-receive钩子上运行部署脚本,所以这似乎是有意义的。但现在我应该把它暴露出来等于假的吗?当然,我可以接受这个建议,但我不明白为什么。@AlexBollbach我同意:我会把工作树拆开,保留裸露的自然。请注意,由于Git2.3,您可以推送太多的非裸回购,正如我在中提到的(请参见此处的链接)