Git diff在config.filemode=false之后报告新/旧模式
我想比较一下branch1和branch2Git diff在config.filemode=false之后报告新/旧模式,git,diff,Git,Diff,我想比较一下branch1和branch2 git diff branch1 branch2 diff——git a/User.javab/User.java 旧模式100644 新模式100755 [git config--add core.filemode false] [~/.gitconfig->filemode=false] 但仍然会出现新/旧模式。。 如何解决这个问题?就Git而言,这不是问题。您正在比较两个提交。这些承诺是存在的。这两项承诺中的任何内容都不会改变。这包括在c
如何解决这个问题?就Git而言,这不是问题。您正在比较两个提交。这些承诺是存在的。这两项承诺中的任何内容都不会改变。这包括在commit
a
中,User.java
具有模式100644
,在commitb
中,User.java
具有模式100755
。这些将永远保持不变git diff
将对它们进行比较,发现它们不同
将core.filemode
配置为false
就是要控制如何更新索引中的文件模式。索引和工作树都不是提交。索引(也称为暂存区)提供了一个可以构建下一次提交的位置
您可以随时使用git update index--chmod
操作任何索引文件模式。无论您使用-x
或+x
将其设置为(100644
或100755
),该模式都将被永久记录-在你做出的下一个承诺中。像这样手动操作文件模式很烦人,但总是可能的
在工作树中保存和更新文件的模式是操作系统的责任。如果操作系统正确执行此操作,则可以将core.filemode
设置为true
,并使用操作系统的模式控制索引/暂存区域的模式。这通常被认为是在将来的提交中控制模式的更方便的方法。但是,如果您的操作系统出现故障,您可以将core.filemode
设置为false,告诉Git忽略工作树模式,只使用存储在索引/暂存区域中的模式
Git创建新存储库时(使用
git init
或git clone
,git会探测操作系统的行为。如果工作树的文件系统行为正确,git会将core.filemode
设置为true
以使git的使用更加方便。如果工作树的文件系统行为不正确,git会将core.filemode
设置为false以避免从错误的操作系统中获取不正确的设置。您可以覆盖Git的配置(使用本地配置设置-全局配置将不起作用,因为从初始创建步骤开始,存储库已经具有本地设置)如果您愿意,但这永远不会影响任何现有提交。任何现有提交的任何部分都不能更改。始终以货物崇拜的方式使用该功能。非常感谢根本原因。现在更清楚了。