git - 接收后 Hook 失败 - 有机会了解原因吗?

标签 git githooks

我正在实现this向我的网站发送更新的方法:

创建了裸存储库以推送到

$ mkdir website.git && cd website.git
$ git init --bare

并添加了以下钩子(Hook):

$ mkdir /var/www/example.com
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/var/www/example.com git checkout -f
$ chmod +x hooks/post-receive

当我从本地存储库推送到 website.git 时,更新工作正常。但没有文件添加到 /var/www/example.com 中。我怎样才能调查这里可能出了什么问题?任何类型的日志或其他什么?

编辑----------------------

如果我推送到 repoRemote 上的 master 分支(而不是 demo),问题就得到解决。为什么会这样?

最佳答案

编辑,2016 年 12 月:人们仍在寻找这个旧答案,三年后的现在,我真正明白真正的问题是什么。当您使用 post-receive Hook 部署多个不同分支时,就会出现此问题。如果您只从裸存储库部署一个分支,那么遇到的问题就会更少。 Git 不断发展,自动部署多个分支的“最佳”解决方案可能会有所不同,具体取决于您拥有的 Git 版本。另请参阅Git post-receive deployment stops working at random points .

(原始答案位于行下方。)


我发现git checkout -f总是需要一个分支名称;允许它在裸存储库中使用 HEAD 不太可预测。

您还可能会遇到索引问题(git 会在裸存储库中写入一个索引,但有时会感到困惑)。最好将 git checkout -f deployment-branch 放入一个新的、全新的空目录中。 (它应该可以为每个部署分支设置一个索引文件,我只是从来没有抽出时间尝试这个。)

如果您的裸存储库在除用于部署的分支之外的其他分支上相当活跃,那么最好使用更精美的 shell 脚本来包装代码,以检查有问题的部署分支是否实际上已更改。也就是说,如果有人更新了 web-devel,则没有必要重新部署 deployment-branch,而他们没有更新了该内容这次。

关于git - 接收后 Hook 失败 - 有机会了解原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19924981/

相关文章:

git - 获取我的本地功能分支与远程主分支没有过时的信息

git - 使用 git 预提交 Hook 修复 mac/windows 新行?

git - Pull Request 在功能分支中 merge 和还原防止重新 merge 它

git - Ubuntu LAMP Git 克隆权限被拒绝(公钥)

git - 让 Git 在提交之前自动删除尾随空格

git - 在 git push 上跳过 githooks

git - 搞砸了本地 git 存储库 - 如何将 "revert a revert"再次匹配上次远程提交?

linux - 在 Ubuntu 中使用 QSerialport 时出现问题

node.js - Heroku:应用程序 fork 后出现 Git 错误

git - 无法从 git 获取对 git post-update Hook 的依赖