如何.gitignore并删除已提交的文件而不影响其他工作副本?
问题描述:
我有一个裸仓库和两个工作副本 - 一个在我的机器上,另一个在服务器上。
事实证明,我必须.gitignore
某个文件,必须为每台机器特定。我们称之为'settings.py
'。这个文件已经提交。如何.gitignore并删除已提交的文件而不影响其他工作副本?
我确实在'gitignore中放入'settings.py
'来忽略它。现在当我改变我的机器git的状态文件仍然告诉我
modified: settings.py
我想通了,我不得不删除settings.py这样的:
git rm --cached settings.py
然后git add .
,其次是git commit
。
但是,当我现在推这到裸露的回购,并将其拉到服务器上的工作副本,settings.py
被删除那里 - 这是不好的,因为我必须保持此特定settings.py
。
我想我可以制作settings.py
的副本,并在删除后将其放回原处,但我觉得必须有更好的方法来做到这一点。
答
你可以告诉git完全忽略对被跟踪文件的修改而不必删除它们。如果你想跟踪后文件
git update-index --assume-unchanged [FILENAME]
然后:
git update-index --no-assume-unchanged [FILENAME]
使用此命令
答
你能保持相当永久settings.py删除(本地和远程),和:
- 版本
setting_remote
文件远程端 - 版本
setting_local
文件本地侧(即与本地特定设置) - 添加一个filter driver能够在结帐时重建正确的
settings.py
文件。
这样,settings.py
保持 “私有”(非版本)。但是每个环境的具体值都是版本控制的,每个环境都设置在自己的文件中,没有任何合并问题。