git-dir无法正常工作,因为无法识别

时间:2015-06-16 21:23:04

标签: git

我想使用git自动推送脚本并配置我的post-receive hook:

#!/bin/bash
while read oldrev newrev ref
do
        if [[ $ref =~ .*/master$ ]];
        then
                echo "Master ref received. Deploying master branch to production server..."
                git --work-tree=/var/www/MFDispo --git-dir=~/Documents/MFDispo/.git checkout -f
        else
                echo "Ref $ref successfully received. Doing nothing. Only the master branch may be deployed on this server."
        fi
done

但推动不起作用:

remote: Master ref received. Deploying master branch to production server...
remote: fatal: Not a git repository: '~/Documents/MFDispo/.git'

但我客户端上的文件夹包含git repo。我看到文件夹结构中的文件夹和git系统正在工作,因为我在整个编码和提交过程中使用它。

我是否需要以不同方式指定路径?

更新

--git-dir的路径更改为$HOME/Documents...后,会出现相同的错误,但我现在也可以看到他正在搜索的路径。它是/home/sesc/Documents...。但这是在我的生产服务器上。我想在客户端上通过输入文件中的路径来搜索路径?

更新2 所以现在我尝试了以下内容:

  1. 最初在我的生产服务器上克隆存储库
  2. 将--git-dir更改为:var/www/MFDispo(这是生产服务器上的路径)
  3. 再次启动相同的脚本
  4. 现在我收到错误: remote: error: insufficient permission for adding an object to repository database objects

    在我开始之前,我需要chmod该文件夹吗?至少它似乎比以前好了!

    谢谢

2 个答案:

答案 0 :(得分:0)

~只会在shell单词的开头处(大致,当它位于行的开头或前面有空格时)扩展到您的主目录。因此,在--git-dir=~/Documents/MFDispo/.git中,~未展开,因此Git会查找一个名为~的目录,其中(我假设)并不存在。您要么完整地写出主目录的路径,要么用shell变量$HOME替换它:

--git-dir=$HOME/Documents/MFDispo/.git

答案 1 :(得分:0)

我不认为〜前缀在您使用它的上下文中正在适当扩展;只有当bash将其识别为单词的开头而不是在参数的中间时,它才被bash扩展。

尝试在相关的行上替换$ {HOME}:

            git --work-tree=/var/www/MFDispo --git-dir=${HOME}/Documents/MFDispo/.git checkout -f