【问题标题】:Pull files into web dir from git repo从 git repo 将文件拉入 web 目录
【发布时间】:2020-03-19 21:43:58
【问题描述】:

我看过很多关于此的页面和帖子,但没有一个适用于我的 Digital Ocean 液滴。

我有一个使用 Capistrano 部署的实时 Rails 应用程序,这意味着我必须在部署之前使用 Git 将其推送到服务器。所以 Git 工作。 然而,现在我想通过一些更改来更新站点,虽然远程 repo 是最新的(通过git log 验证),但 web 目录不是最新的。

我知道我需要将新文件传递到该目录,但是如何?

挂钩/后接收:

#!/bin/sh
git checkout -f

纳达。 我还运行了sudo ./post-receive,只是为了确保执行后接收挂钩(是的,它是可执行的)。没有输出。只是另一个 CLI 提示符。

为什么要获得一个包含最新 git push 的文件夹如此困难??

【问题讨论】:

标签: git push live


【解决方案1】:

您缺少unset GIT_DIR 行,假设您的挂钩位于myrepo.git/hooks 的裸存储库(没有签出文件的存储库)中

#!/bin/sh
unset GIT_DIR
cd /path/to/checkout/repository
git pull
git checkout -f

未设置将确保 Git 将您签出的存储库视为当前存储库(而不是裸存储库)

【讨论】:

  • 那么究竟需要什么才能让 git push 更新 web 目录?我创建一个带有或不带有--bare 的仓库?它必须被称为.gitProjectName.git 吗?它是否需要在项目文件夹中才能工作?我是否需要有一个空文件夹并将代码第一次推送到这个 repo 以便能够使用git push origin master 更新它?当我创建一个非裸仓库时,它看起来像是要更新实时目录,但在推送项目后,失败并出现“合并将覆盖 README.txt”。删除文件,重试。下一个文件同样的错误...
  • @Kane 如果你推送,最好的做法是推送到一个裸仓库,在里面放置你的 postreceive 钩子,然后更新非裸仓库。
  • 因此,裸存储库位于 /home/deployuser 之类的非 Web 目录中,并且 post-receive 挂钩将其再次推送到 webroot/projectname/.git 中的非裸存储库。那是对的吗?你如何在同一台服务器上从一个 repo 推送到另一个 repo?到目前为止,我对 git 的体验仅限于推送到远程服务器。我正在学习,但它令人困惑......
  • @Kane 后接收不推送:它将文件夹更改为实际的非裸仓库,并从裸仓库中提取。
  • 好的。因此,为了确保我理解它,接收后挂钩位于我推送代码的裸仓库中(在挂钩目录中)。它使用 cd 将目录更改为项目路径,然后使用 git pull 从该路径执行 git pull,然后使用 git checkout -f 因此它正在检查裸仓库,因为挂钩是从该目录执行的。对吗?
猜你喜欢
  • 2019-07-29
  • 2015-01-11
  • 1970-01-01
  • 2013-05-25
  • 2012-12-18
  • 1970-01-01
  • 2012-05-13
  • 2012-09-10
  • 2017-06-03
相关资源
最近更新 更多