2015-09-04 180 views
1

我有一个使用GIT的版本控制下的网站。我设置了一个系统,它自动将我的master分支中的更改部署到我的生产服务器。也就是说,我的存储库中有一个web-hook,它会触发一个PHP脚本,从本质上启动服务器上的git pull以便下拉更改。Git忽略文件,但不删除它

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

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

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

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

回答

2

如果您从存储库中删除一个跟踪的文件,它将被删除,如果更改被拖动。这是预期的和期望的行为,因为如果从存储库中删除文件,则认为它不再需要。

你的情况最简单的解决方案是从存储库中删除文件并将其添加到.gitignore,然后立即手动将其添加回服务器上。您也可以先对服务器上的文件进行一些无关紧要的更改,例如添加一个空行,导致pull失败。

另一种方法是将文件保存在存储库中,并在开发存储库上使用git update-index --assume-unchanged config.php。这告诉git忽略文件的变化,尽管它被跟踪。

还有一种选择是创建一个新文件,如local_config.php,如果它不存在,那么它不会被git跟踪并有条件地包含在config.php之内。你可以在这个文件中做所有的本地修改。

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

+0

你能解释为什么我必须从存储库中删除文件将它添加到.gitignore,然后将其添加回来? –