Подтвердить что ты не робот

Как предотвратить git в Cygwin для установки core.filemode = true

Я использую git из установки Cygwin на моем ПК с ОС Windows. Хотя cygwin поддерживает биты разрешения Unix в файловой системе NTFS, родные программы Windows, подобные моему Eclipse, не знают о них, так что все файлы, созданные программами Windows, имеют установленный бит бит (755).

Мне редко приходится проверять файл с исполняемым битом, установленным в репозиторий git. Поэтому я хотел бы иметь core.filemode=false по умолчанию. Я установил это значение в своей глобальной конфигурации, но, к сожалению, это обычно не имеет никакого эффекта: как документировано, git clone проверяет файловую систему, чтобы увидеть, поддерживает ли она разрешения и устанавливает core.filemode соответственно на каждый репозиторий, и поэтому у меня есть конфигурация core.filemode=true в каждой конфигурации репозитория, переопределяя мой желаемый по умолчанию.

Есть ли способ предотвратить git clone от установки core.filemode автоматически?

4b9b3361

Ответ 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
}

Ответ 2

Обычный способ - инициализировать или клонировать ваше репо с помощью каталога шаблонов git.

 git clone --template=<template directory>

В этом каталоге вы можете указать конфигурационный файл, который будет использоваться в качестве локальной конфигурации репо для git для нового init'd или клонированного репо.

OP oberlies отчеты, хотя это не будет работать для core.filemode и core.ignorecase, для git config справочная страница:

git-clone или git-init будет проверять и устанавливать core.filemode false, если это необходимо, когда создается репозиторий.

Ответ 3

Параметр core.fileMode = true может быть очищен автоматически при помощи git hook. В этом случае я считаю, что наилучшим вариантом является хук после проверки, который будет запускаться каждый раз, когда ветка извлекается или клонируется репо. Создайте скрипт bash с именем post-checkout (без расширения файла) со следующим содержимым:

#!/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)>'