You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git推送Django项目时settings.py意外推送至服务器的解决方法

解决Git推送Django项目时settings.py被覆盖的问题

你的核心问题是settings.py已被提交到Git仓库历史(包括远程master分支),仅添加.gitignore和清除本地缓存无法彻底阻止它被推送覆盖,因为远程仓库仍存在该文件的追踪记录。以下是分步解决方法:

1. 停止本地Git对settings.py的追踪

执行命令移除本地仓库对该文件的追踪(不会删除本地文件):

git rm --cached settings.py

提交这个变更到本地Dev分支:

git commit -m "Stop tracking settings.py"

2. 清理远程仓库的settings.py记录(二选一)

方案A:强制推送覆盖远程历史(适合单人开发场景)

如果没有其他协作者,直接强制推送本地Dev分支到远程master,彻底移除远程仓库中settings.py的历史:

git push live Dev:master --force

⚠️ 注意:强制推送会覆盖远程master分支的全部历史,若有其他开发者协作需提前沟通。

方案B:用服务器钩子保留settings.py(适合多人协作或需保留远程历史)

在服务器的裸仓库中配置post-receive钩子,推送后自动恢复服务器上的settings.py:

  1. 进入服务器裸仓库的hooks目录:
    cd /path/to/your/bare-repository/hooks
    
  2. 创建并编辑post-receive脚本:
    touch post-receive
    chmod +x post-receive
    nano post-receive
    
  3. 添加以下内容(替换部署目录路径):
    #!/bin/bash
    DEPLOY_DIR="/path/to/your/django/deployment/folder"
    git --work-tree=$DEPLOY_DIR checkout -f master
    # 恢复服务器原有settings.py
    git --work-tree=$DEPLOY_DIR checkout master -- settings.py
    
  4. 保存退出后,后续推送代码时,服务器会自动保留原有settings.py不被覆盖。

3. 确认.gitignore配置正确

检查本地项目根目录的.gitignore文件,确保包含:

settings.py

若有Django其他需忽略的文件,可一并添加(如*.pyc、__pycache__/、media/等)。

4. 验证效果

修改本地任意非settings.py文件,提交后执行推送:

git push live Dev:master

登录服务器查看部署目录的settings.py,确认未被本地文件覆盖。

内容的提问来源于stack exchange,提问作者Mark Challice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:57:49