停止git更新远程文件



我得到了一个git存储库,在那里我得到了几个文件。(实际上这是我的代码库的来临(

在这个存储库中有一个文件,我想保存在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中必须完成的工作?

您正在询问如何忽略对被跟踪文件的更改,而答案是Git不会这么做。来自Git常见问题解答中的条目:

Git没有提供这样做的方法。原因是,如果Git需要覆盖此文件,例如在签出过程中,它不知道对文件的更改是否珍贵,是否应该保留,或者它们是否无关紧要,是否可以安全地销毁。因此,它必须采取安全的路线,并始终保护它们。

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

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

最新更新