【问题标题】:git commit . ignoring assume-unchanged [duplicate]混帐提交。忽略假设不变[重复]
【发布时间】:2022-01-18 13:53:55
【问题描述】:

我有一个文件,我在结帐时将其标记为假定未更改。大多数命令(例如diffadd .commit -a)都尊重这一点,但由于某种原因,该命令似乎忽略了该标志:

git commit .

这是一个错误吗?如果没有,在这种情况下是否有一个标志可以改变 git 的行为?

(我的 git 版本在 2.25.1,这应该很重要。)

【问题讨论】:

  • 你需要--skip-worktree,而不是--assume-unchanged
  • @CodeCaster: --skip-worktree 可能也无济于事,尤其是在使用稀疏结账时(它使用跳过工作树位来实现自己的目的)。不支持整个方案:如果它适用于任何特定用户,那对他们来说没问题,但他们不应该指望它在未来的 Git 版本中工作。
  • @torek 好的警告,谢谢。我都赞成包含.env.distappsettings.dist.json 之类的模板文件,让开发人员将其复制到.gitignored .envappsettings.json 这样人们就不必采取任何技巧来保持配置文件被忽略,直到发生了变化。但有时您需要一种解决方法,因为 repo 和/或团队还没有为此做好准备 - 但正如您所说,YMMV。

标签: git git-assume-unchanged


【解决方案1】:

Git 的假设不变标志用于提高 lstat(2) 调用缓慢的系统的性能。当您设置此位时,您承诺根本不会更改文件。如果要更改文件,则必须取消设置该位以通知 Git 它已更改。这只是性能优化。

如果您试图忽略对跟踪文件的更改,Git FAQ is very clear that's not possible:

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

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

FAQ 推荐了一种配置文件的方法:

如果您的目标是修改配置文件,将文件签入存储库通常会很有帮助,该文件是一个模板或一组默认值,然后可以在旁边复制并根据需要进行修改。这第二个修改过的文件通常会被忽略以防止意外提交。

【讨论】:

    猜你喜欢
    • 2017-11-18
    • 2015-12-30
    • 2019-12-11
    • 2020-02-20
    • 1970-01-01
    • 2011-10-27
    • 2021-01-03
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多