0

我无法让 git 忽略我wp-config.php的部署文件。我使用 git 设置了自动部署(这是一个非常棒的工具,如果您不了解它,可以在此处阅读有关它的信息- 您不需要像文章中指出的那样使用 kinsta 托管,尽管您的文件结构可能会有所不同)。

但是每次我推送更改时,它都会覆盖我的wp-config.php文件,导致网站上出现数据库错误。发生这种情况是因为用于部署的 git 挂钩引入了更改,然后签出任何本地更改。由于这是一个临时站点,它使用生产中的 repo,但在 中具有不同的值wp-config.php,以便连接到它自己的数据库。

到目前为止我已经尝试过:

  • 在登台服务器上提交对 wp-config 的更改,因此它不会被 git 钩子签出
  • wp-config.php在登台服务器上添加.gitignore(我本来应该做的)
  • 增加wp-config.php.gitignore我本来应该做的)开发并推动分期
  • 向钩子添加一行以在执行部署后post-receive检查更改wp-config.php

这是我的post-receive挂钩文件(客户端名称替换为 XXXXX):

#!/bin/bash
TARGET="/www/XXXXX_975/public"
GIT_DIR="/www/XXXXX_975/private/XXXXX.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 staging..."
                git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
                git checkout /www/XXXXX_975/public/wp-config.php
        else
                echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
        fi
done

该站点位于public目录中。存储库位于不同的目录中private,以免被部署覆盖。

这是一个 Wordpress 网站,托管在 Kinsta 上。如果有任何我忘记包含的信息,请告诉我。

谢谢!

4

1 回答 1

1

当您在未指定特定路径的情况下签出修订版时,Git 将始终用修订版中的文件覆盖工作树中的文件,并且无法避免这种情况。您的具体情况是试图忽略对跟踪文件的更改,Git FAQ 解释说无法完成

既然你已经意识到这个文件不应该被跟踪并且应该被忽略,你可以做git rm --cached wp-config.php然后提交从存储库中删除它。然后,当您将文件推送到远程服务器时,该文件将被删除,但您将来可以为每个登台和生产服务器配置自定义版本,Git 将不理会它。

于 2021-07-09T16:03:45.090 回答