Git ignore文件,如何不删除它

3
我有一个使用GIT版本控制的网站。我已经设置了一个系统,可以自动将我的master分支中的更改部署到生产服务器。即,在我的存储库中有一个Web Hook触发PHP脚本,该脚本在服务器上启动git pull以拉取更改。
我的问题在于,我目前有一个跟踪使用git的配置文件(config.php)。我和另一位开发人员想要拥有我们自己的不同于服务器上文件的config.php文件,因此我们希望告诉git停止跟踪此文件,并假装它不存在。
我们决定先尝试使用一个不那么重要的文件进行测试,因此我们将test.php添加到我们的.gitignore文件中,希望这样可以解决问题。但是Git仍在跟踪该文件,因此我尝试运行git rm --cached test.php来停止跟踪该文件。这似乎有效,因此我们提交并推送了更改。
令我惊讶的是,当我们的部署脚本在服务器上启动拉取时,我们发现该文件已从生产环境中删除。幸运的是,已删除的test.php并不重要。
简而言之,我如何告诉git忽略它当前正在跟踪的文件,使其不再被跟踪并从存储库中删除,但是在我的生产服务器上保留它?

请参考以下链接:https://dev59.com/9lMH5IYBdhLWcg3w92It - goofology
1个回答

6
如果您从存储库中删除一个已跟踪的文件,则在拉取该更改时,该文件将被删除。这是期望和希望的行为,因为如果从存储库中删除文件,则假定不再需要该文件。
在您的情况下,最简单的解决方案是从存储库中删除文件并将其添加到.gitignore,然后立即在服务器上手动添加它。您还可以先对服务器上的文件进行一些无形的更改,例如添加一个空行,以使拉取操作失败。
另一个选择是将文件保留在存储库中,并在开发存储库上使用git update-index --assume-unchanged config.php命令。这告诉git忽略对该文件的更改,尽管它已被跟踪。
还有另一种选择,即创建一个新文件,如local_config.php,该文件未由git跟踪,并且在config.php的条件包含下进行。您可以在此文件中进行所有本地修改。
最后一个选项具有优势,即您仍然可以通过将文件的新版本推送到存储库来在服务器上修改config.php。

你能解释一下为什么我需要从代码库中删除文件,将其添加到.gitignore,然后再将其添加回去吗? - Francisco Ochoa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接