我在我的.gitignore中有settings.py但是当我执行git pull时它仍会更改它

时间:2018-02-28 09:21:52

标签: django git bitbucket

我的本​​地项目和我的直播项目(Bitbucket repo)有不同的settings.py。所以我已将settings.py添加到.gitignore,所以当我对任一文件进行更改时,当我的git被拉或推时,它们不会被发送到其他仓库。

但是,我刚刚从我的本地仓库中做了git pull - 它进行了合并,并将settings.py文件更改为Bitbucket settings.py

发生了什么事?

编辑 - Gitignore文件:

/lib
/media
.env
/include
/reports
.DS_Store
*.pyc
celerybeat-schedule.db
__pycache__/
db.sqlite3
log.django
settings.py
static/
/static

4 个答案:

答案 0 :(得分:1)

如果您的仓库中已有settings.py文件,则将其添加到.gitignore不会阻止文件被拉出。唯一的方法是将它从回购中完全删除。

但这是错误的做法。您不应该从版本控制中排除整个设置文件。开发和生产之间的几乎所有设置都保持不变;有很多技术可用于维护那些不同的技术,从单独的local_settings文件到使用环境变量。

答案 1 :(得分:0)

要使git完全停止跟踪settings.py,包括之前的提交。

在将规则添加到git文件以忽略它之前,

.gitignore不会忽略已跟踪的文件。

在这种情况下,必须先使用以下命令取消跟踪文件:git rm --cached <filename>

因此,如果您在初始提交后尝试忽略此文件,请运行此命令:git rm --cached settings.py,您应该很高兴。

要使git停止跟踪settings.py中的未来更改,除了初始提交。

参考this回答。

答案 2 :(得分:0)

我认为您已经将 settings.py 文件推送到远程。所以当你从遥控器拉。即使您已将此文件添加到.gitignore,您的本地文件也会更改。 git将继续跟踪任何已被跟踪的文件。

解决此问题的简单方法。 第一: git rm -r --cached . git add .

然后: git commit -am "Remove ignored files"

有关详情,请参阅this answer。

答案 3 :(得分:0)

您可以使用git stash。它会将您当前的settings.py保存为隐藏文件,然后您可以执行git pull。然后,一旦完成提取,就可以执行git stash的应用,这将还原所有隐藏的文件(如settings.py),并在发生任何更改的情况下将其合并。