我有一个 Web 界面,用于将脚本从 Github 上的 repo 部署到我们的实时服务器。Web 界面仅使用一些 git 命令触发 bash 脚本。如果我在本地进行更改,推送到 repo,然后运行 bash 脚本从 repo 拉取到实时服务器,它就可以正常工作。但是,如果我直接在 repo 中进行更改(通过 Github 的 Web 界面),我会遇到快进/锁定问题。
以下是我正在采取的步骤:
- 在 Github repo 上对文件进行更改
通过 Web 从尝试 git push/pull 的实时服务器运行 bash 脚本(作为 apache)。出现以下问题:
PUSH To [email protected]:name/name.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to '[email protected]:name/name.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. PULL From github.com:name/name branch master -> FETCH_HEAD error: unable to unlink old 'includes/footer.inc' (Permission denied) Updating 8f6d922..d1eba9d Updating 8f6d922..d1eba9d
以 root 身份通过 SSH 登录,尝试推送/拉取,一切正常。
关于为什么此方法对 Apache 不起作用的想法?
答案1
root
因为存储库本地副本中的文件不属于 Web 服务器用户。鉴于您已push
ed 并pull
ed as ,至少其中一些文件可能属于root
。
chown -R
是你的朋友。
答案2
推送失败是因为您的历史记录有分歧。您需要将本地存储库中的更改合并到当前远程分支,然后将结果推送到 Github。请参阅普罗吉特了解该行动的详细情况。
拉取失败是因为,正如 Mo 所说,您遇到了权限问题。