0

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

git commit .

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

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

4

1 回答 1

3

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

如果您试图忽略对跟踪文件的更改,Git FAQ 非常清楚这是不可能的

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

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

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

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

于 2021-12-15T23:32:01.150 回答