如何阻止Git覆盖数据库连接文件?

问题描述

我有一个文件“ db-connection.PHP”,该文件对于每个服务器版本都必须不同。 (Localhost,Dev和Production)。起初我以为.gitignore是答案,但是经过大量的痛苦和研究,我意识到Printing emails... Traceback (most recent call last): File "print_emails.py",line 53,in main print_emails() File "print_emails.py",line 43,in print_emails primary_emails,primary_email_ids = get_emails_and_ids(primary_source_folder) File "print_emails.py",line 29,in get_emails_and_ids property_accessor = item.PropertyAccessor File "C:\Program Files\python38\lib\site-packages\win32com\client\__init__.py",line 474,in __getattr__ return self._ApplyTypes_(*args) File "C:\Program Files\python38\lib\site-packages\win32com\client\__init__.py",line 467,in _ApplyTypes_ self._oleobj_.InvokeTypes(dispid,wFlags,retType,argTypes,*args),pywintypes.com_error: (-2147352567,'Exception occurred.',(4096,'Microsoft Outlook','Out of memory or system resources. Close some windows or programs and try again.',None,-2147024882),None) Press enter to exit... 仅适用于未跟踪的文件:例如文件不在存储库中。

出于明显的原因,我与 xampp 一起使用的localhost版本要求db文件位于存储库中。当然,这意味着每次我将其推送到Dev时,都会破坏Dev db连接。

有没有办法告诉.git“是的,我知道这个文件存在,但是无论如何都不要管它”?

解决方法

这是一个常见问题,有两种解决方案,具体取决于您的需求。

首先,如果您总是要拥有相同的配置文件,并且它们只会根据环境(而不是开发人员机器)而变化,那么只需在存储库中创建文件的三个版本(例如,在config目录),然后使用脚本或手动将适当的目录复制到位。然后,您删除db-connection.php文件并忽略它。

如果此文件实际上需要依赖于用户的系统(例如,它包含个人开发人员凭据或系统特定的路径),则应发送模板文件并使用脚本将其复制到位(可能会填写用户的相关详细信息)。在这种情况下,db-connection.php也将被忽略并从存储库中删除。

人们尝试做的两件事不起作用。其中之一是尝试保留多个分支,每个分支都有其自己的文件副本。这是行不通的,因为Git确实没有提供一种在分支之间不合并某些文件的方法。

人们尝试做的另一件事就是通过调用git update-index忽略对跟踪文件的更改。这在各种情况下都会中断,因为不支持这样做,并且Git FAQ entrygit update-index manual page解释了原因。

,

当您不希望git管理对该文件的更改时,可以将skip worktree选项与git-update-index一起使用。

git update-index --skip-worktree db-connection.php

参考:Skip worktree bit