从 git 存储库中删除文件,但不从服务器中删除文件

Remove file from git repo, but not from server

在过去的某个时候,一个符号链接媒体文件已添加到我正在处理的 git 存储库中。我想将其从回购中删除,在本地删除文件,但不在回购部署到的服务器上删除(我也不想重新创建符号链接)。 git update-index --assume-unchanged 似乎不持久,git rm --cached 会在部署时杀死文件。

有办法吗?

简短的回答是:不,没有办法两者兼顾:

  1. 从存储库中删除一个文件
  2. 有一个原始的 git pull 删除克隆磁盘上的文件

如果您的部署过程在您的生产机器上以 git pull 开始,您将需要采取一些额外的操作来在这台机器上重新创建符号链接。


我不知道 deployhq 是如何工作的:我想你有办法编写代码 "and please execute this script/list of actions after deploying the code",这个操作列表应该包括 "add the symlink".

我在 deployhq config files 中找到了最接近您想要的东西。这适用于任何非回购文本文件,但不幸的是,这不适用于 symlinks.

这可能有效:

  1. 首先从存储库中删除 symlink(git rm,提交,push/deploy)。
  2. ssh 到你部署的服务器。在那里创建符号 link 。如果它在 repo 中,您可以将它添加到 .gitignore,但您不必这样做 - 没关系。

现在服务器有 link,并且它未连接到存储库,因此它不会存在于 github 或您正在使用的任何内容或您的本地计算机中。它只会是服务器上的一个文件。重点是 link 根本不应该在任何地方的回购中 ,并且 您需要在服务器上手动创建它