我在Windows PC上使用Cygwin安装的git。尽管cygwin支持NTFS文件系统上的Unix权限位,但我的Eclipse之类的本机Windows程序并不了解它们,因此Windows程序创建的所有文件都设置了可执行位(755
)。
我很少需要签入一个可执行位设置到Git存储库的文件。因此,我希望默认情况下为core.filemode=false
。我在全局配置中设置了此值,但不幸的是,这通常没有效果:documented,git clone
探测文件系统以查看它是否支持权限并相应地设置core.filemode
每个存储库,因此我在每个存储库配置中都有core.filemode=true
配置,覆盖了我想要的默认值。
有没有办法阻止git clone
自动设置core.filemode
?
答案 0 :(得分:1)
您可以设置Bash,以便每次cd
它检查该目录是否为存储库并正确设置它。在~/.bash_profile
添加
PROMPT_COMMAND=pc
pc () {
[ -d .git -a ! -g .git/config ] || return
git config core.filemode 0
chmod +s .git/config
}
答案 1 :(得分:1)
可以使用git hook自动清除core.fileMode = true
设置。在这种情况下,我认为最好的方法是在结帐后或克隆存储库时运行的结帐后挂钩。创建名为post-checkout
(无文件扩展名)的bash脚本,其内容如下:
#!/usr/bin/env bash
core_file_mode=$( git config --local core.fileMode )
if [[ "${OSTYPE}" == 'cygwin' && "${core_file_mode}" == 'true' ]]; then
git config --local --unset core.fileMode
fi
如果要将挂钩应用于单个存储库,请将脚本放在$GIT_DIR/hooks
中(默认情况下,$GIT_DIR
是<path-to-your-repo>/.git
)。如果要将钩子应用于所有项目,请将以下条目添加到全局gitconfig文件中:
[core]
hooksPath = '<path-to-folder-containing-your-hook(s)>'
答案 2 :(得分:0)
通常的方法是使用git模板目录初始化或克隆你的repo。
git clone --template=<template directory>
在该目录中,您可以指定一个配置文件,该文件将用作新的init或克隆存储库的本地 git repo配置。
OP oberlies reports虽然它对core.filemode
和core.ignorecase
不适用于git config
man page: