首页 > 解决方案 > 本地 Git 配置在 git clone 之后总是有不需要的文件模式设置

问题描述

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

我想要filemode = false。但是在本地 git 配置中,在 git clone 之后它总是默认设置为 true。

我想知道这个本地 git 设置来自哪里以及如何编辑这个“骨架”。

标签: gitrepositorybitbucketconfig

解决方案


这些core设置:

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

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

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

  • 创建一个模式为只读/只写的新文件(不执行)。

    现在设置执行位。是否设置了执行位?

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

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

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

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

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

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

因为core.ignorecase并且core.filemode不是为了用户可配置的,Git 没有办法将它们设置为 Git 根据您的操作系统硬编码执行的操作。更改它们有点危险,因为它们会告知 Git系统的行为方式,并且 Git 可能依赖于该行为来正确操作各种 Git 命令。但是,对于某些特殊效果,可以同时使用它们中的一个或两个。只要确保你知道你在做什么,当你这样做的时候。

(设置core.filemodefalse,即使 Git 将其设置为true,当前是“安全的”,对于安全的某些定义,始终如此,所以如果它给你你想要的行为,那实际上是可以的,至少现在是这样。我也没有Git 也不在这里对 Git 的未来版本做出任何承诺。)


1 Git 有一个编译时选项告诉它:不要运行实验;core.filemode每次都设置为false。 因此,出于您的特定目的,您可以获取 Git 源代码的副本并使用NO_TRUSTABLE_FILEMODEset 重新构建它。但是,只创建一个别名或 shell 脚本来代替git initor可能会更容易,它会git clone执行 init-or-clone 然后更改设置。


推荐阅读