我有一个使用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忽略它当前跟踪的文件,将其从我的存储库中取消跟踪并删除,但将其保留在我的生产服务器上?
答案 0 :(得分:2)
如果从存储库中删除跟踪文件,则在删除该更改时将删除该文件。这是预期和期望的行为,因为如果从存储库中删除文件,则认为不再需要它。
在您的情况下,最简单的解决方案是从存储库中删除文件并将其添加到.gitignore
,然后立即手动将其添加回服务器。您还可以首先对服务器上的文件进行一些非重大更改,例如添加空行,以使拉动失败。
另一种选择是将文件保留在存储库中,并在开发存储库中使用git update-index --assume-unchanged config.php
。这告诉git尽管它被跟踪,但忽略对文件的更改。
另一种选择是创建一个像local_config.php
这样的新文件,如果它存在,则不会被git跟踪并有条件地包含在config.php
中。您可以在此文件中进行所有本地修改。
最后一个选项的优点是,您仍然可以通过将新版本的文件推送到存储库来修改服务器上的config.php
。