停止 git 更新远程文件

Stop git from updating remote file

我有一个 git 存储库,其中有几个文件。 (实际上这是我的 Advent of Code 存储库)

在这个存储库中有一个文件,我想将其保存在 GitHub 远程但我不想 git 更新它,即使这个文件在本地发生了变化。此外,我希望在将此存储库克隆到的每台计算机上自动执行此行为。


所以基本上是这些步骤:

  1. 创建文件并添加初始内容 (v1)
  2. 提交并推送文件到远程分支
  3. 做一些让 git 忽略每台机器上对该文件的所有更改
  4. 更改文件内容 (v2)

现在我在远程 (v1) 和本地 (v2) 中获得了文件,但是当我 运行 git status 时,我不想看到关于这个文件的任何信息。此外,如果我将此存储库(带有文件 v1)克隆到另一台机器并更改文件(现在是 v3),我不想在 git status 中看到关于另一台机器上此文件的任何内容。

举个例子:我想将包含我的会话 cookie 的文件添加到 GitHub。显然我不想将我的会话 cookie 推送到 GitHub,只是一个占位符或其他东西。但是当我 运行 程序时,它必须包含正确的会话 cookie,所以我必须用实际的 cookie 更新文件。现在我不希望 git 将此文件更新为 GitHub。当我将此存储库克隆到另一台机器时,我希望它包含像远程中一样的占位符,然后我可以手动更新它。另外 git 也不想从这台机器更新文件。


首先我尝试将它添加到 .gitignore 和 运行ning git rm --cached myfile 但后来 git 也想从远程删除这个文件。

我试过 git update-index --assume-unchanged myfile。从技术上讲,这可以满足我的要求,只是不会在所有其他机器上,因为它只会影响我的本地 git 存储库。

有什么方法可以完成第 3 步中必须完成的工作吗?

您问的是如何忽略对跟踪文件的更改,答案是 Git 不会那样做。来自 entry in the Git FAQ:

Git doesn’t provide a way to do this. The reason is that if Git needs to overwrite this file, such as during a checkout, it doesn’t know whether the changes to the file are precious and should be kept, or whether they are irrelevant and can safely be destroyed. Therefore, it has to take the safe route and always preserve them.

It’s tempting to try to use certain features of git update-index, namely the assume-unchanged and skip-worktree bits, but these don’t work properly for this purpose and shouldn’t be used this way.

任何类型的秘密都应该通过环境或配置文件传递。可以为此目的创建一个模板并将其签入,然后使用脚本将其复制到一个被忽略的位置,以便您可以编辑它并添加秘密。对于大多数主要生产系统,秘密通常通过环境传递,因此它们不会写入磁盘。