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

Ben*_*uch 17 git file gitignore delete-file

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

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

modified:  settings.py
Run Code Online (Sandbox Code Playgroud)

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

git rm --cached settings.py
Run Code Online (Sandbox Code Playgroud)

然后git add .,接着git commit.

但是,当我现在把它推到裸仓库并将其拉到服务器上的工作副本时,会settings.py被删除 - 这很糟糕,因为我必须保持这个特定的settings.py.

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

Out*_*ced 9

你可以告诉git完全忽略对被跟踪文件的更改而不必删除它们.使用此命令:

git update-index --assume-unchanged [FILENAME]
Run Code Online (Sandbox Code Playgroud)

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

git update-index --no-assume-unchanged [FILENAME]
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 7

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

  • 版本setting_remote远程端的文件
  • 版本setting_local本地文件(即具有本地特定设置)
  • 添加一个能够在结帐时重建正确文件的过滤器驱动程序settings.py.

替代文字

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