在部署时,我很难让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
目录中。repo位于不同的目录private
中,以免被部署覆盖。
这是一个Wordpress网站,托管在Kinsta上。如果有我忘了包括的信息,请告诉我。
谢谢!
当您在没有指定特定路径的情况下签出修订版时,Git将始终用修订版中的文件覆盖工作树中的文件,这是无法避免的。您的具体案例是试图忽略对跟踪文件的更改,Git常见问题解答解释说这是无法做到的。
既然您已经意识到这个文件一开始就不应该被跟踪,应该被忽略,那么您可以执行git rm --cached wp-config.php
,然后提交将其从存储库中删除。当你把文件推送到远程服务器时,它会被删除,但你将来会有一个好处,那就是你可以在未来为每个暂存服务器和生产服务器配置一个自定义版本,Git不会理会它。