所以,我有一个临时服务器设置,我想做的是当有人推送到非主分支时更新临时服务器的目录。我当前的接收后 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/