... было ли изменение в недавнем обновлении Git или Git LFS, которое делает обязательным использование атрибута фильтра?
Нет: он имеет всегда был обязательным. 1 Причина в том, что способ работы Git -LFS заключается в том, что он использует фильтры smudge и clean для сохранения Git, так как содержимое в ваш репозиторий , файл, содержащий информацию о том, как получить другой файл, который вообще не хранится в Git. Этот другой файл хранится на каком-то сервере - он не обязательно должен совпадать с вашими Git серверами - и извлекается оттуда фильтром smudge . Файл, хранящийся на этом другом сервере, обновляется (ну, дополняется) новым с помощью фильтра clean . 2
Btw. также кажется, что не имеет значения, указан ли шаблон в .gitattributes ('*.png' filter=lfs -text
) или нет (*.png filter=lfs -text
), это правильно?
Да . Вам нужны кавычки, только если в самом имени файла есть пробелы. Однако кавычки должны быть двойными кавычками , а не одинарными: "*.png"
.
(Обратите внимание, что Git обрабатывает пятна и чистые фильтры. немного странно: определение драйвера идет в файле .gitconfig
или .git/config
и, следовательно, может быть глобальным или для каждого репозитория, но использование драйвера входит .gitattributes
и, следовательно, всегда для каждого репозитория. Причина этого связана с моделью безопасности вокруг драйверов фильтров.)
1 Кто-то мог и, возможно, создал команду внешнего интерфейса, которая скрывает это от вас, но она по-прежнему требуется, как описано выше.
2 В более подробно: когда у вас есть фиксация H (some ha sh ID), Git фактически имеет не одну, а три «активные» копии каждого файла :
Одна из этих копий заморожена на все время и находится в текущей фиксации, то есть фиксации H . Эта копия - во всяком случае, ее содержание; режим и имя файла хранятся отдельно - в специальном формате, предназначенном только для чтения, только Git, и дедупликации для идентичных копий, которые могут быть в других Git коммитах.
Git называет эти объекты содержимого замороженного формата объектами blob . Обычно вы не имеете дело с ними напрямую.
Вторая копия - это еще один дедуплицированный объект blob - содержимое в замороженном формате, но потому что он хранится в Git index , его можно заменить в любой момент.
Последняя копия файла находится в вашем рабочем дереве и является обычным повседневным файл. Он не сжат и не в каком-то специальном формате, который может читать только Git и никто не может писать: это обычный повседневный файл.
Обычно последний файл создается путем копирования -и-распаковка внутреннего объекта blob. Если вы настроили для файла фильтр размытия , вместо того, чтобы Git просто выполнять эту декомпрессию самостоятельно, Git распаковывает файл, но затем пропускает содержимое через фильтр размытия. Фильтр smudge LFS считывает содержимое, затем вызывает сервер LFS и говорит: «Вот ключ поиска: получите реальное содержимое». Фильтр размазывания LFS записывает полученный файл в ваше рабочее дерево.
Обычно git add <em>file</em>
работает путем копирования и сжатия данного файла во внутренний объект blob, а затем записи его в индекс. Если вы настроили чистый фильтр для файла, Git не читает файл напрямую: он читает фильтр smudge и редактирует файл. Фильтр смазывания LFS «редактирует» файл, считывая данные и сохраняя их на сервере LFS, а затем генерируя новый ключ поиска.
Следовательно, когда у вас есть фильтры LFS, единственные данные Git - это ключ поиска LFS-сервера.
Выбор того, какие фильтры размытия и очистки для каких файлов использовать, устанавливается в .gitattributes
и / или .git/info/attributes
. Программа для запуска для данного пятна или чистого фильтра устанавливается в файле конфигурации Git, используя, например, git config
, git config --global
или git config --system
.