本地 Git 配置在 git 克隆后总是有不需要的文件模式设置

Local Git Config have always unwanted filemode settings after git clone

当我从 bitbucket 克隆存储库时,存储库克隆中的本地 git 配置总是有一些设置与我的全局设置不匹配。

我想要 filemode = false。但在本地 git 配置中,它在 git 克隆之后始终默认设置为真。

我想知道这个本地 git 设置来自哪里以及我如何编辑这个 "skeleton"。

这些 core 设置:

  • core.bare
  • core.repositoryformatversion
  • core.ignorecase
  • core.filemode

不是通常应该更改的设置。前两个是 Git 自己的内部设置,其余两个通知 Git 在存储库 [=100] 上使用时 操作系统 的行为=] 刚刚创建。

具体来说,core.filemode告诉Git以下实验的结果:1

  • 仅使用模式 read/write 创建一个新文件(不执行)。

    现在设置执行位。执行位设置了吗?

    现在清除执行位。执行位是否清零?

如果执行位按照命令设置和清除它,core.filemode 设置为 true。这告诉 Git 你和 Git 都可以控制是否设置执行位。

core.ignorecase 设置是在通过更简单的实验创建新存储库时建立的:

  • 创建 .git/config 文件。现在尝试读取名为 .git/CoNfIg 的文件。这可能吗?

如果是这样,操作系统将打开一个文件,该文件的文件名只是大小写与实际文件不同。 Git 将此信息记录在 core.ignorecase.

repositoryformatversion 设置为 compiled-in 常量零,或者如果您使用一些新功能,有时会调整为 1。如果将来存储库格式发生变化,Git 会将新存储库中的格式版本设置为适当的数字。bare 标志根据您是否创建了裸克隆来设置,可能使用 --bare--mirror。)

因为 core.ignorecasecore.filemode 不打算 成为 user-configurable,Git 无法将它们设置为根据您的操作系统,Git 之外的其他内容是硬编码的。更改它们有点危险,因为它们会告知 Git 系统的行为方式 ,并且 Git 可能取决于该行为以正确操作各种 Git 命令。但是,为了某些特殊效果,可以与其中一个或两个一起说谎。只要确保你知道自己在做什么,当你这样做的时候。

(将 core.filemode 设置为 false,即使 Git 会将其设置为 true,目前是 "safe",对于安全的某些定义, 在任何时候, 所以如果它给你你想要的行为, 那实际上是好的, 至少现在是这样。我和 Git 都不会在这里对 Git 的未来版本做出任何承诺。)


1Git有一个compile-time选项告诉它:不要运行实验;只需每次都将 core.filemode 设置为 false。 因此,为了您的特定目的,您可以获得 Git 源的副本并使用 NO_TRUSTABLE_FILEMODE 集重建它。但是创建别名或 shell 脚本代替 git initgit clone 可能更容易,它会执行 init-or-clone 然后更改设置。