我想使用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 所以现在我尝试了以下内容:
var/www/MFDispo
(这是生产服务器上的路径)现在我收到错误:
remote: error: insufficient permission for adding an object to repository database objects
chmod
该文件夹吗?至少它似乎比以前好了!
谢谢
答案 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