13

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

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

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

4

3 回答 3

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
}
于 2012-12-17T08:08:34.223 回答
1

core.fileMode = true可以使用git hook自动清除该设置。在这种情况下,我相信一个 post-checkout hook 是最好的选择,它会在任何时候检出分支或克隆 repo 时运行。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

如果您希望将钩子应用于单个 repo,请将脚本放入$GIT_DIR/hooks(默认$GIT_DIR<path-to-your-repo>/.git)。如果希望钩子适用于所有项目,请将以下条目添加到您的全局 gitconfig 文件中:

[core]
    hooksPath = '<path-to-folder-containing-your-hook(s)>'
于 2019-06-26T01:53:49.850 回答
0

通常的方法是使用 git 模板目录初始化或克隆你的 repo。

 git clone --template=<template directory>

在该目录中,您可以指定一个配置文件,该文件将用作新初始化或克隆的 repo 的本地git repo 配置。

OP oberlies 报告虽然它不适用于core.filemodeand core.ignorecase, 对于git config手册页

git-clonegit-init将在创建存储库时进行探测并core.fileMode在适当的情况下设置为 false。

于 2012-09-17T11:47:04.883 回答