Есть ли глобальный способ применения .gitattributes? - PullRequest
1 голос
/ 05 июня 2019

Я нашел отличную функцию Git, которая разархивирует файл и будет использовать несжатый результат в diff, используя .gitattributes, плюс изменение вашей локальной конфигурации репо или глобальной конфигурации git. Вот как выглядят файлы Simulink * .slx - в основном это сжатые zip-файлы XML (возможно, с некоторыми другими добавленными материалами).

Однако для этого требуется, чтобы я добавлял .gitattributes к каждому репо, нуждающемуся в этом обновлении - и его конфигурации.

Конкретные необходимые изменения:

  1. Добавьте следующую строку в .gitattributes:

    *.slx diff = slx
    
  2. Добавьте следующие строки в конфигурацию локального репо (один метод: git config -e):

    [diff "slx"]
        textconv = unzip -c -a
    

Вопрос: есть ли способ применить ту же функцию глобально к любому репо через глобальный конфигурационный файл или другим способом?

Цель состоит в том, чтобы, если бы я настроил глобальную функцию локально, Git знал бы, что нужно распаковать любой файл * .slx в любом репо.

1 Ответ

4 голосов
/ 05 июня 2019

Редактировать: Когда LightCC найден , вы должны иметь возможность поместить их в ваш домашний .git/config/attributes или другой файл, который вы установили с помощью core.attributesFile. Обратите внимание, что любая существующая запись .gitattributes может переопределить любые настройки в core.attributesFile. Приоритет конкурирующих записей заключается в том, что те, кто «ближе» к файлу, переопределяют те, что «дальше» от файла. Например, если в каталоге .gitattributes указано *.ext a=b, это переопределяет верхний каталог рабочего дерева .gitattributes, значение которого *.ext a=c, которое переопределяет core.attributesFile *.ext a=d.

Короткий ответ - нет: вы можете определить фильтр diff textconv в вашем (персональном, глобальном для вас) .gitconfig, например, git config --global -e. Однако у вас должно быть .gitattributes для каждого хранилища.

Стоит добавить, что эта идея определения атрибутов в .gitattributes (что должно быть для каждого хранилища), но определения драйверов для них - будь то драйверы textconv для diff, драйверы слияния для git merge или драйверы фильтров для регистрации / проверки - немного сломан, по моему мнению, по крайней мере. Проблема в том, что файл .gitattributes автоматически копируется на git clone, а драйверы - нет.

Существует фундаментальная проблема безопасности, которая не позволяет Git копировать драйверы на клон, поэтому является разумным. Но это явно не очень хорошая ситуация. Обратите внимание, что обходит его, автоматически обновляя конфигурацию каждого репозитория; вы можете использовать решение такого же типа, запустив собственную команду вместо git, которая вызывает Git, а также суетится с вашей конфигурацией.

...