【问题标题】:How to deploy new code via git, if git only installed on my user?如果仅在我的用户上安装了 git,如何通过 git 部署新代码?
【发布时间】:2012-03-01 12:50:21
【问题描述】:

场景

  • 我可以访问这个旧的 linux 服务器,它不再接收任何类型的更新。只有打破和修复。服务器上没有安装 git,所以我在本地用户的 ~/opt/bin 上安装了它。我将目录添加到我的路径中,并且为了在服务器上进行开发,我可以使用 git 完成几乎所有我需要做的事情。
  • 我认为在我的工作站上进行开发并推送到准备好的生产代码会很酷。
  • 我在我的服务器上设置了一个裸存储库,在我的 GIT_WORK_TREE 中创建了一个带有 checkout -f 的 post-receive 文件,似乎一切都已相应设置。

问题

当我尝试推送我的主分支时,我收到以下错误:

 sh: git-receive-pack: command not found
 fatal: The remote end hung up unexpectedly

我知道为什么会这样。我的 SSH 上的 $PATH 只看到 /usr/bin:/bin:/usr/sbin:/sbin

我的用户是使用 /bin/sh shell 设置的,因此不能使用 .profile/.bashrc/.bashprofile。

我也不能使用 .ssh/environment,因为我的 PermitUserEnvironment 设置为 no。

我试图创建一个钩子/预接收并在那里设置路径,但这也不起作用。

知道如何让 SSH 看到 git 并使其正常工作吗?

谢谢

【问题讨论】:

    标签: git shell deployment ssh non-interactive


    【解决方案1】:

    我找到了!

    http://www.wiredrevolution.com/git/fix-git-upload-pack-and-git-receive-pack-errors-on-shared-hosting

    第二种解决方案涉及将路径添加到您的 git-upload-path 和 git-recieve-path 在您的本地 .git/config 文件下 [remote “起源”]。这是最简单的方法,因为您只需要做这个 换一次。

    [remote "origin"]
    url = <repo address>
    fetch = +refs/heads/*:refs/remotes/origin/*
    uploadpack = <path to git-upload-pack>
    receivepack = <path to git-receive-pack>
    

    【讨论】:

      【解决方案2】:

      这是使用默认 ssh 守护进程的问题:它强制 PATH 为不可变值,并且如果您的工具(此处为“git”)未安装在根管理路径中(如 /usr/bin) ,无法添加它(您可以提出的任何请求,例如从 /usr/bin 到您的 git 可执行文件的符号链接,都将被视为安全风险)。

      我遇到的唯一解决方案是编译自己的 ssh(使用自己的帐户运行)以适应工具的本地安装。
      这就是我在GitHub project compileEverything 中实现的(除了其他工具之外,它还编译了一个 ssh 守护进程)。

      【讨论】:

      • 谢谢伙计,但我找到了一个允许它工作的配置:)
      猜你喜欢
      • 2021-07-07
      • 2023-03-19
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多