【问题标题】:Re-instating automatic deployments after git repo wiped out?在 git repo 消失后重新启动自动部署?
【发布时间】:2021-09-09 14:21:44
【问题描述】:

我有一个关于在我们客户网站上的 git 存储库被清除后如何开始使用自动部署的问题。

repo 发生了什么? 客户希望在其托管服务提供商上使用一项功能,他们可以在其中对临时站点进行复制编辑并将其“推送”到实时站点。他们推送编辑后,git repo 消失了。

自动部署:我们正在使用 git 挂钩进行部署。这是一个很好的how-to。基本上,您可以使用git push <environment> <branch> 在本地进行部署。当您运行此命令时,git 会运行以下 post-receive 挂钩(出于隐私考虑,已删除站点名称):

#!/bin/bash
TARGET="/www/[sitename]_571/public"
GIT_DIR="/www/[sitename]_571/private/[sitename].git"
BRANCH="master"

while read oldrev newrev ref
do
        # only checking out the master (or whatever branch you would like to deploy)
        if [[ $ref = refs/heads/$BRANCH ]];
        then
                echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
                git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
        else
                echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
        fi
done

远程服务器的结构是:

/www/[站点名称]_571/ -> 私有 -> [sitename].git -> 钩子
-> 公开 -> 网站文件 + .git

让 git 重新回到现场的破坏性最小的方法是什么,以便我们可以重新开始进行部署?

谢谢!

【问题讨论】:

  • 我在发布后注意到实时服务器实际上确实拥有完整的 git repo。我的错误是期望git log 会返回任何东西,而我所拥有的设置永远不会。不确定我的问题是否仍然有价值 - 如果合适,模组可以删除。
  • 一个 repository 是自包含的(在.git 目录中),由提交和辅助数据组成。 签出的工作树是提取一个提交的结果;它不包含恢复存储库所需的信息。所以你不能从提交到存储库,除非你仍然有存储库,或者它的克隆或备份。

标签: git githooks git-deploy


【解决方案1】:

当你运行这个命令时,git 会运行下面的 post-receive 钩子

这意味着您需要在服务器上恢复一个裸存储库副本“myrepo.git”,您将在其中恢复myrepo.git/hooks/post-receive 挂钩。

然后你可以再次推送,钩子会从裸仓库中使用git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f检查你的网站

你可以:

  • make a bundle 您当前的存储库,
  • 将该捆绑包(一个文件)复制到服务器,然后
  • git clone --bare mybundle myrepo.git 在服务器上。

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 2015-09-11
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2013-06-30
    相关资源
    最近更新 更多