如何防止Cygwin上的git设置core.filemode = true

时间:2012-09-17 11:02:50

标签: git cygwin

我在Windows PC上使用Cygwin安装的git。尽管cygwin支持NTFS文件系统上的Unix权限位,但我的Eclipse之类的本机Windows程序并不了解它们,因此Windows程序创建的所有文件都设置了可执行位(755)。

我很少需要签入一个可执行位设置到Git存储库的文件。因此,我希望默认情况下为core.filemode=false。我在全局配置中设置了此值,但不幸的是,这通常没有效果:documentedgit clone探测文件系统以查看它是否支持权限并相应地设置core.filemode 每个存储库,因此我在每个存储库配置中都有core.filemode=true配置,覆盖了我想要的默认值。

有没有办法阻止git clone自动设置core.filemode

3 个答案:

答案 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.filemodecore.ignorecase不适用于git config man page

  

git-clonegit-init会在创建存储库时探测并设置core.fileMode false。