我有一个使用 GIT 进行版本控制的网站。我设置了一个系统,基本上可以自动部署我的更改master
分支到我的生产服务器。也就是说,我的存储库中有一个 Web 挂钩,它会触发一个 PHP 脚本,该脚本本质上会启动一个git pull
在服务器上以拉取更改。
我的问题在于我当前有一个配置文件(config.php
)使用 git 进行跟踪。我自己和另一位开发人员想要拥有自己的config.php
文件与服务器上的文件不同,因此我们想告诉 git 停止跟踪该文件并假装它不存在。
我们决定首先使用不太重要的文件进行测试,因此我们添加了test.php
to our .gitignore
文件,希望这能解决问题。 Git 仍在跟踪该文件,所以我尝试运行git rm --cached test.php
试图停止跟踪该文件。这似乎有效,所以我们承诺并推动我们的改变。
令我惊讶的是,当我们的部署脚本在服务器上启动拉取时,我们发现该文件已从生产中删除。幸亏删掉了test.php
并不重要。
TLDR;我如何告诉 git 忽略它当前跟踪的文件,将其取消跟踪并从我的存储库中删除,但将其完好无损地保留在我的生产服务器上?
如果您从存储库中删除跟踪文件,则在拉取该更改后该文件也会被删除。这是预期和期望的行为,因为如果从存储库中删除文件,则假定不再需要它。
对于您的情况,最简单的解决方案是从存储库中删除文件并将其添加到.gitignore
,然后立即手动将其添加回服务器上。您还可以先对服务器上的文件进行一些无关紧要的更改,例如添加空行,以导致拉取失败。
另一种选择是将文件保留在存储库中并使用git update-index --assume-unchanged config.php
在您的开发存储库上。这告诉 git 忽略对文件的更改,尽管它被跟踪。
另一种选择是创建一个新文件,例如local_config.php
不被 git 跟踪并有条件地包含在config.php
如果存在的话。您可以在此文件中进行所有本地修改。
最后一个选项的优点是您仍然可以修改config.php
通过将文件的新版本推送到存储库来在服务器上进行操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)