git - 本地 Git 配置在 git clone 之后总是有不需要的文件模式设置
问题描述
当我从 bitbucket 克隆存储库时,存储库克隆中的本地 git 配置总是有一些设置,这些设置与我的全局设置不匹配。
我想要filemode = false。但是在本地 git 配置中,在 git clone 之后它总是默认设置为 true。
我想知道这个本地 git 设置来自哪里以及如何编辑这个“骨架”。
解决方案
这些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.filemode
为false
,即使 Git 将其设置为true
,当前是“安全的”,对于安全的某些定义,始终如此,所以如果它给你你想要的行为,那实际上是可以的,至少现在是这样。我也没有Git 也不在这里对 Git 的未来版本做出任何承诺。)
1 Git 有一个编译时选项告诉它:不要运行实验;core.filemode
每次都设置为false。 因此,出于您的特定目的,您可以获取 Git 源代码的副本并使用NO_TRUSTABLE_FILEMODE
set 重新构建它。但是,只创建一个别名或 shell 脚本来代替git init
or可能会更容易,它会git clone
执行 init-or-clone 然后更改设置。
推荐阅读
- python - 无法在 Spyder 变量资源管理器中读取来自 read_sql 的数据框
- python - 如何在 python 中添加到 txtfile 的顶部?
- reactjs - 如果我尝试使用 API 响应数据更新我的状态,为什么会开始无限循环?
- java - Micrometer TimedAspect 不会拦截对使用 @Timed 注释的方法的调用
- r - ggplot:按工作日排序
- android - 无法使用 glide 库从 firebase 存储中获取图像
- velocity - 在衡量分析中的速度时如何考虑 UserStory 的故事点?
- nestjs - Nestjs自定义配置服务错误注入其他模块服务
- azure - Azure 全局管理员无法(禁用)在“访问控制(IAM)”下添加角色
- css - 反应改变风格取决于文本