【问题标题】:Stop git from updating remote file停止 git 更新远程文件
【发布时间】:2020-12-11 16:29:14
【问题描述】:

我有一个 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 并运行 git rm --cached myfile 但随后 git 也想从远程删除这个文件。

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

有没有办法让我完成步骤 3 中必须完成的事情?

【问题讨论】:

  • 试试this答案
  • 感谢您的快速回答。但是我必须在我将存储库克隆到的每台机器上执行git update-index --skip-worktree myfile,以便能够对那里的文件进行更改,并在那里忽略它。有没有办法将此信息也推送到遥控器?

标签: git github gitignore


【解决方案1】:

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

Git 没有提供执行此操作的方法。原因是如果 Git 需要覆盖这个文件,例如在结帐期间,它不知道对文件的更改是否宝贵并且应该保留,或者它们是否无关紧要并且可以安全地销毁。因此,它必须走安全的路线并始终保护它们。

尝试使用git update-index 的某些功能是很诱人的,即假设未更改和跳过工作树位,但这些功能不能正常工作,因此不应以这种方式使用。

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

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 2018-05-19
    • 2018-03-04
    • 2017-12-31
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2013-07-22
    • 2014-03-01
    相关资源
    最近更新 更多