Git忽略文件而不删除它

时间:2015-09-04 15:17:44

标签: git deployment version-control gitignore

我有一个使用GIT进行版本控制的网站。我有一个系统设置,基本上,自动将我的master分支中的更改部署到我的生产服务器。也就是说,我的存储库中有一个Web钩子,它触发一个PHP脚本,该脚本实质上在服务器上启动git pull以便进行更改。

我的问题在于我目前有一个使用git跟踪的配置文件(config.php)。我自己和另一个开发人员想拥有我们自己的config.php文件,这些文件与服务器上的文件不同,因此我们想告诉git停止跟踪这个文件并假装它不存在。

我们首先决定使用不太重要的文件进行测试,因此我们将test.php添加到我们的.gitignore文件中,希望这样可以解决问题。 Git仍在跟踪该文件,因此我尝试运行git rm --cached test.php以尝试停止跟踪该文件。这似乎有效,所以我们承诺并推动了我们的改变。

令我惊讶的是,当我们的部署脚本启动了我们服务器上的拉动时,我们发现该文件已从生产中删除。谢天谢地,删除的test.php并不重要。

TLDR; 如何告诉git忽略它当前跟踪的文件,将其从我的存储库中取消跟踪并删除,但将其保留在我的生产服务器上?

1 个答案:

答案 0 :(得分:2)

如果从存储库中删除跟踪文件,则在删除该更改时将删除该文件。这是预期和期望的行为,因为如果从存储库中删除文件,则认为不再需要它。

在您的情况下,最简单的解决方案是从存储库中删除文件并将其添加到.gitignore,然后立即手动将其添加回服务器。您还可以首先对服务器上的文件进行一些非重大更改,例如添加空行,以使拉动失败。

另一种选择是将文件保留在存储库中,并在开发存储库中使用git update-index --assume-unchanged config.php。这告诉git尽管它被跟踪,但忽略对文件的更改。

另一种选择是创建一个像local_config.php这样的新文件,如果它存在,则不会被git跟踪并有条件地包含在config.php中。您可以在此文件中进行所有本地修改。

最后一个选项的优点是,您仍然可以通过将新版本的文件推送到存储库来修改服务器上的config.php