【问题标题】:Git ignore file, without deleting itGit忽略文件,而不删除它
【发布时间】:2015-11-30 19:29:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: git deployment version-control gitignore


【解决方案1】:

如果您从存储库中删除一个跟踪文件,那么如果该更改被拉取,它将被删除。这是预期和期望的行为,因为如果从存储库中删除文件,则假定不再需要它。

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

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

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

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

【讨论】:

  • 你能解释一下为什么我必须从存储库中删除文件并将其添加到 .gitignore 然后再添加回来吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 2012-07-05
  • 1970-01-01
相关资源
最近更新 更多