【问题标题】:Git hook/post-receive No such file or directoryGit hook/post-receive 没有这样的文件或目录
【发布时间】:2018-05-04 12:26:12
【问题描述】:

所以我有一个裸存储库,我们用它来控制对我们网页的更改。在那个裸仓库上是一个 post-receive 钩子,当我们将更改推送到它时运行。钩子所做的只是使用以下代码实现对工作目录的更改:

WRK_DIR="/url/to/work/tree/"
GIT_DIR="/url/to/bare/repo.git/"

#Update WRK_DIR with changes pushed into GIT_DIR...
git --work-tree=$WRK_DIR --git-dir=$GIT_DIR checkout -f

无论出于何种原因,我都会收到以下信息:

remote: fatal: Not a git repository: '/url/to/bare/repo.git/'

我已验证该钩子在正确的用户下运行,并且该用户拥有该文件夹的权限。但无论出于何种原因,钩子都找不到目录,我绝对确定 url 是正确的。

跑步

cd /url/to/bare/repo.git/

从钩子内部也返回

remote: hooks/post-receive: line 13: cd: /url/to/bare/repo.git/: No such file or directory

就像我说的,我确定网址是正确的,并且没有错字。任何帮助将不胜感激。

【问题讨论】:

  • 路径中有~(主目录)吗?如果是,则将其更改为真正的 home 路径。
  • @ElpieKay 感谢您的快速回复,但没有路径是 C 盘的完整路径。
  • 如果您手动运行此命令,它是否有效?您说“C 驱动器”,这就为错误打开了各种“带有空格和反斜杠的 Windows 路径”的可能性。此外,引用变量总是一个好习惯,例如git --work-tree="$WRK_DIR" --git-dir="$GIT_DIR" checkout -f 以防他们有空格和其他东西。
  • @Mort 感谢您的意见,但我已经设法解决了这个问题。钩子和裸仓库都在服务器上,所以我在钩子中放置了一些 cd 来测试它返回的内容。奇怪的是它返回了我本地机器的内容......不知道为什么,但如果我将变量更改为文件夹的网络位置并转义反斜杠,它执行得很好。
  • 我不知道你为什么要尝试这样做。为什么不直接从源中提取作为部署步骤,而不是推送到生产环境?如果你创建一个非裸存储库,那么你就不需要钩子了。

标签: git git-bash githooks git-post-receive git-bare


【解决方案1】:

已解决

钩子和裸仓库都在服务器上,所以我在钩子中放置了一些 cd 来测试它返回的内容。奇怪的是,它返回了我本地机器的内容......不知道为什么,但如果我将变量更改为文件夹的网络位置并转义反斜杠,它执行得很好。

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 2014-06-02
    • 2013-07-17
    • 1970-01-01
    • 2015-09-03
    • 2021-05-01
    • 2015-07-29
    • 1970-01-01
    相关资源
    最近更新 更多