防止文件被删除

Prevent File from Being Removed

我正在开发一个 MVC.NET 项目,我有位于项目根目录中的外部配置文件。
在某些时候,我不小心将这些文件提交到 Git 并推送了更改。

经过多次提交之后,技术负责人意识到我的错误并将其设置为从 Git 中删除,将文件添加到 .gitignore,并保留更改。

现在我有了 Git 忽略的文件,但是,如果我更改分支,有时它会拉入删除这些文件的提交。
所以我不得不重新触摸文件并重新添加所有内容(很烦人)。

有没有一种方法,即使我更改分支,git bash 也不会删除我的外部配置文件?

我在“Git - Difference Between 'assume-unchanged' and 'skip-worktree'”中记录了 git update-index --skip-worktree/--assume-unchanged 如何 不是 是一个好的解决方案。
(参见最后一部分,“Git 2.25.1(2020 年 2 月)”部分)

我宁愿使用:

  • a config.tpl(带有占位符值的模板文件)。
  • 一个能够获取模板文件并在结帐时自动生成实际文件(保持未跟踪、私有)的脚本
  • a .gitignore 忽略生成的文件(你已经有了)
  • a .gitattribute 声明一个 smudge 内容过滤器(见下文)

通过 content filter driver, using a .gitattributes declaration.

自动生成配置文件


(图片来自 "Customizing Git - Git Attributes" from "Pro Git book"))

一旦您在本地配置中声明内容文件管理器驱动程序,它就会在 git checkout 上自动为您生成(未跟踪的)文件。
请参阅“Best practice - Git + Build automation - Keeping configs separate”中的完整示例。

这样,再多的 git 签出也不会删除所述文件。

此外,在切换分支时尝试更新的 git switch 命令:它确实比 git checkout.

更好地尊重文件