gpt4 book ai didi

Git 钩子(Hook)脚本失败但脚本在终端中运行良好

转载 作者:太空狗 更新时间:2023-10-29 14:46:06 25 4
gpt4 key购买 nike

这很令人困惑。

我有一个在裸仓库上运行的 git post-update 钩子(Hook)脚本。它的工作是告诉下游(非裸机)git repo 更新自身(一种用于版本化登台服务器的推送部署脚本)。如果我从终端运行脚本,它工作正常。但是当它在推送后由 git 运行时,我得到一个 git 路径错误的错误。

我已经在 Ubuntu 14.04 + git 1.91 和 Mac git 1.9.3 (Apple Git-50) 上试过了

我显然做错了什么,但我对 git hooks 了解不够,不知道从哪里开始。

这是脚本:

#!/bin/sh

staging_path="/tmp/git/copy"
staging_repo="$staging_path/.git"
staging_branch=$(git --git-dir=$staging_repo rev-parse --abbrev-ref HEAD)
upstream_branch=$(git rev-parse --abbrev-ref HEAD)

if [ "$staging_branch" != "master" ]
then
echo "Staging site is not on master. Cannot initiate pull."
exit 0
fi

if [ "$upstream_branch" != "master" ]
then
echo "Main repo is not on master -- not sure why that would be. Cannot initiate pull."
exit 0
fi

git -C $staging_path fetch --all
echo "git status after fetch --all:"
echo $(git -C $staging_path status)
git -C $staging_path reset --hard origin/master
echo ""
echo "git status after reset --hard:"
echo $(git -C $staging_path status)

这是我推送后发生的情况:

$ git push origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 272 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: fatal: Not a git repository: '.'
remote: git status after fetch --all:
remote: fatal: Not a git repository: '.'
remote:
remote: fatal: Not a git repository: '.'
remote:
remote: git status after reset --hard:
remote: fatal: Not a git repository: '.'
remote:
To /tmp/git/origin/original.git
8eef13d..96c9847 master -> master

但是当我手动运行它时,我看到它正常完成:

$ ./post-update
Fetching origin
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From /tmp/git/origin/original
4e92291..96c9847 master -> origin/master
git status after fetch --all:
On branch master Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded. (use "git pull" to update your local branch) nothing to commit, working directory clean
HEAD is now at 96c9847 seven

git status after reset --hard:
On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean

编辑:我已经注销了 shell 变量的值,只是为了确保它们给出了我的想法。这些值是:

remote: $staging_path: /tmp/git/copy
remote: $staging_repo: /tmp/git/copy/.git
remote: $staging_branch: master
remote: $upstream_branch: master

最佳答案

可以肯定的是,我总是更喜欢取消设置 GIT_DIRGIT_WORK_TREE 环境变量,以便给 git(通过 --git-dir--work-tree,或 both since git 1.8.5 with -C )我想在钩子(Hook)中使用的确切路径。

这些变量可以由 Git 设置,因为 Git 事件触发了一个 Hook ,而不是在 shell session 中手动启动相同的 Hook 。

关于Git 钩子(Hook)脚本失败但脚本在终端中运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26481707/

25 4 0
文章推荐: html - 如何创建一个 HTML 按钮,它就像指向同一页面上的项目的链接?
文章推荐: android - webview加载数据后activity出现一些白 block
文章推荐: html - 在 ie 7 的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com