如何.gitignore并删除已提交的文件而不影响其他工作副本?

时间:2010-09-30 18:42:00

标签: git file gitignore delete-file

我有一个裸存储库和两个工作副本 - 一个在我的机器上,另一个在服务器上 事实证明,我必须.gitignore某个文件必须特定于每台机器。我们称之为“settings.py”。此文件已提交。

我确实在.gitignore中放了'settings.py'来忽略它。当我现在更改我的机器上的文件时,git status仍告诉我

modified:  settings.py

我发现我必须删除settings.py,如下所示:

git rm --cached settings.py

然后git add .,然后是git commit

但是,当我现在将其推送到裸仓库并将其拉到服务器上的工作副本时,settings.py将被删除 - 这很糟糕,因为我必须保留此特定settings.py。< / p>

我认为我可以制作settings.py的副本,并在删除后将其重新放入,但我觉得必须有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:9)

您可以告诉git完全忽略对已跟踪文件的更改,而无需将其删除。使用此命令:

git update-index --assume-unchanged [FILENAME]

然后,如果您想稍后跟踪该文件:

git update-index --no-assume-unchanged [FILENAME]

答案 1 :(得分:7)

您是否可以永久删除settings.py(本地和远程),并且:

  • 版本远程端的setting_remote文件
  • 本地版本setting_local文件(即具有本地特定设置)
  • 添加 filter driver ,可以在结帐时重建正确的settings.py文件。

alt text

这样,settings.py保持“私密”(非版本化)。但是每个环境的特定值都是版本化的,每个都设置在自己的文件中,没有任何合并问题。