Git 发布接收 Hook : update current working branch to staging server

标签 git githooks git-post-receive

所以,我有一个临时服务器设置,我想做的是当有人推送到非主分支时更新临时服务器的目录。我当前的接收后 Hook 如下所示:

echo "post hook is on the run!"

while read oldrev newrev ref
do
    echo "$ref"
done

unset $(git rev-parse --local-env-vars)
cd ../staging/bikereport
git fetch
git pull origin $ref

echo "Post receive finsihed"

但是,我没有在服务器上看到我想要的更改,并且远程返回“已经是最新的”,这让我认为它是从 Master 或其他地方 pull 的?

这不是一个优雅的解决方案,但我们是一个致力于单个项目的非常小团队。理想的解决方案是将每个分支保存到登台服务器中的新目录,然后每次推送时仅更新该目录。

最佳答案

cd ../staging/bikereport
git fetch

请注意:您的 git 目录不是您的 staging/bikereport 存储库。
仍然是钩子(Hook)正在运行的地方。

您需要将 GIT_DIR 设置为 /full/path/ofstaging/bikereport/.git (当然,将 GIT_WORK_TREE 设置为/full/path/ofstaging/bikereport),以便从该存储库运行的命令正常工作。
并且您需要取消设置GIT_INDEX_FILE!

有关更多详细信息,请参阅“Why doesn't setting GIT_WORK_TREE work in a post-commit hook? ”。

你的钩子(Hook)应该以:

#!/bin/sh
 unset GIT_INDEX_FILE
 export GIT_WORK_TREE=/full/path/ofstaging/bikereport/
 export GIT_DIR=/full/path/ofstaging/bikereport/.git/

关于Git 发布接收 Hook : update current working branch to staging server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17505211/

相关文章:

node.js - 为什么需要在 git repo 中删除 node_modules 文件夹?

git - Git、Git-Submodule 和 SVN 服务器的故事

Github post-receive hook自动 pull 回滚

git - 创建一个 git 钩子(Hook)以防止 merge 到本地存储库中的特定分支,但允许从远程 pull

git - 如何在接收后 Hook 中使用 GIT 访问存储库文件

php - Git - 从接收后 checkout 中排除配置文件

git - 在 Windows 批处理文件中捕获响应

git - 如何使用 Git 初始推送到远程存储库?

git - 如何阻止 root 运行 git pull?

bash - 从通过 post-receive 钩子(Hook)创建的 ssh session 调用时,导出不起作用