Jon*_*hon 3 git deployment version-control gitignore
我有一个使用 GIT 进行版本控制的网站。我有一个系统设置,基本上可以自动将我的master分支中的更改部署到我的生产服务器。也就是说,我的存储库中有一个 Web 钩子,它触发一个 PHP 脚本,该脚本基本上git pull在服务器上启动 a以便下拉更改。
我的问题在于我目前有一个config.php使用 git 跟踪的配置文件 ( )。我自己和另一个开发人员想要拥有config.php与服务器上的文件不同的我们自己的文件,因此我们想告诉 git 停止跟踪该文件并假装它不存在。
我们决定首先使用一个不太重要的文件进行测试,所以我们添加test.php到我们的.gitignore文件中,希望这能奏效。Git 仍在跟踪该文件,因此我尝试运行git rm --cached test.php以尝试停止跟踪该文件。这似乎奏效了,所以我们承诺并推动了我们的改变。
令我惊讶的是,当我们的部署脚本在我们的服务器上发起拉取时,我们发现该文件已从生产中删除。谢天谢地,删除test.php并不重要。
TLDR;我如何告诉 git 忽略它当前跟踪的文件,取消跟踪并从我的存储库中删除它,但在我的生产服务器上保持完整?
如果您从存储库中删除跟踪文件,则在拉取该更改时将删除该文件。这是预期和期望的行为,因为如果从存储库中删除文件,则假定不再需要它。
在您的情况下,最简单的解决方案是从存储库中删除文件并将其添加到.gitignore,然后立即手动将其添加回服务器。您还可以先对服务器上的文件进行一些无关紧要的更改,例如添加一个空行,以导致拉取失败。
另一种选择是将文件留在存储库中并git update-index --assume-unchanged config.php在您的开发存储库中使用。这告诉 git 忽略对文件的更改,尽管它被跟踪。
另一种选择是创建一个新文件,例如local_config.phpgit 不跟踪并有条件地包含config.php它(如果它存在)。您可以在此文件中进行所有本地修改。
最后一个选项的优点是您仍然可以config.php通过将文件的新版本推送到存储库来在服务器上进行修改。