前几天在我的godaddy linux cPanel上设置了git hook 得到它的工作和所有。 但是,我设置几个项目的方式是我有一个 / src 文件夹和一个 / public 文件夹,它显然包含我想在服务器上提供的资源。
我有一个.gitignore文件,但我仍然想将开发代码推送到我的github。 那么,问题是 - 是否可以忽略post-receive git hook中的那些开发文件和文件夹?
我已按照此旧质量检查中提供的示例 - Git: Deploy only a directory from post-receive hook,但未成功。
我尝试了以下代码的多种变体
#!/bin/sh
git --work-tree=/home/user/public_html/hm --git-dir=/home/user/repo/hm.git checkout -f -- public/
cd home/user/public_html/hm
cp -r public/. .
rm -rf public
这就是我得到的错误
zeMachine:hm username$ git push live
Counting objects: 519, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (502/502), done.
Writing objects: 100% (519/519), 10.08 MiB | 155.00 KiB/s, done.
Total 519 (delta 255), reused 0 (delta 0)
remote: error: pathspec 'public/' did not match any file(s) known to git.
remote: hooks/post-receive: line 3: cd: home/user/public_html/hm: No such file or directory
remote: cp: cannot stat `public/.': No such file or directory
To ssh://example.com/home/user/repo/hm.git
* [new branch] master -> master
公用文件夹确实存在但是如您所见,您会在一段时间后开始提问:D 此外,如果我删除-f之后的所有内容 代码工作但又一次,然后我有我不需要的所有开发文件和文件夹。
答案 0 :(得分:0)
我遇到了同样的问题。
尝试将其插入接收后
# The production directory
TARGET="/srv/www/<your-app>"
# A temporary directory for deployment
TEMP="/srv/tmp/<your-app>"
# The Git repo
REPO="/srv/git/<your-app>.git"
# Deploy the content to the temporary directory
mkdir -p $TEMP
git --work-tree=$TEMP --git-dir=$REPO checkout -f
cd $TEMP
# Do stuffs, like npm install…
# Replace the production directory
# with the temporary directory
cd /
rm -rf $TARGET
mv $TEMP $TARGET
来源:https://medium.com/@francoisromain/vps-deploy-with-git-fea605f1303b