问题描述
我无法让 git 在部署时忽略我的 wp-config.php
文件。我使用 git 设置了自动部署(这是一个非常棒的工具,如果您不了解它,您可以阅读它here - 您不需要像文章中指出的那样使用 kinsta 托管,尽管您的文件结构可能会有所不同)。
但是每次我推送更改时,它都会覆盖我的 wp-config.php
文件,从而导致站点上的数据库错误。发生这种情况是因为用于部署的 git hook 引入了更改,然后检查了任何本地更改。由于这是一个临时站点,它使用生产中的存储库,但在 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 上。如果我忘记包含任何信息,请告诉我。
谢谢!
解决方法
当您在未指定特定路径的情况下检出修订时,Git 将始终用修订中的文件覆盖工作树中的文件,并且无法避免这种情况。您的具体情况试图忽略对跟踪文件的更改,the Git FAQ explains cannot be done。
既然你已经意识到这个文件不应该被跟踪并且应该被忽略,你可以只执行 git rm --cached wp-config.php
然后提交将其从存储库中删除。然后,当您将其推送到远程服务器时,该文件将被删除,但您将来会受益,您可以在将来为每个临时服务器和生产服务器配置自定义版本,而 Git 将不理会它。