Git:User-&gt; Server-&gt; hook post rec-&gt; push to Live Server&#34; Fatal:empty ident <push @ blabla。(none))not =“”allowed“=”“when =”“ push =“”尽管=“”having =“”identity =“”set

时间:2016-10-18 14:53:00

标签: git permissions githooks git-config

=“”

我收到此错误:

架构和工作流程如下:

1)开发人员通过ssh-&gt;推送到远程仓库(dev服务器)。 2)开发服务器有一个帖子接收挂钩,通过ssh-&gt;

在活动服务器上调用bash脚本
#!/bin/bash
while read oldrev newrev refname
do


    branch=$(git rev-parse --symbolic --abbrev-ref $refname)

    # Use this if-sentence to only update live server if branch is the wanted branch, e.g. master or stable
    if [[ "desarrollo" == "$branch" ]]; then
            # Fetch this branch from live-server
            ssh push@mpdvsweb-test.jusbaires.gov.ar '/bin/gitmirror'
    fi
done

3)Live服务器执行从dev服务器获取数据的脚本 - &gt;

#!/bin/bash

cd /var/www/penal_test_git
git fetch git-repo
git merge -m 'Overwriting live server' -s recursive -X theirs git-repo/desarrollo

4)我在每个开发人员的机器上都收到以下错误(git config --global为我们设置但是它不起作用,我也尝试为存储库设置它并且它没有&#39 ;或者工作)

enter image description here

什么可能失败?

git config --local -l返回user.name,user.email和git config -l返回user.name和user.email两次,可能一个是本地的,另一个是全局的。在另一台开发者机器上,全局是唯一的一组,并且无法正常工作

1 个答案:

答案 0 :(得分:0)

我解决了它,我改变了三件事并且有效。首先,我删除了本地repo标识,然后我重新定义了全局配置(我不知道这是否有所不同,因为我已经正确配置了全局配置)。 然后,我不得不将我的实时服务器上的bash更改为fetch --all,否则如果没有那个标志,如果有人直接编辑实时服务器上的文件导致开发服务器的挂钩执行时赢得冲突,则会产生冲突合并。让合并发生,这样一切都被覆盖:

#!/bin/bash

cd /var/www/penal_test_git

git fetch --all
git reset --hard git-repo/desarrollo

最后,这些文件具有root用户的权限,而不是www-data,因为另一个开发人员更改了它,并且它不允许使用fetch覆盖文件。这是另一个错误的一部分,但它有助于使其工作。