2016-05-04 1 views
1

В отличие от , clean и smudge являются лишь фильтры, которые предназначены непосредственно обрабатывать содержимое файла, не зная любого git функциональности (поскольку один может потребоваться использовать собственные инструменты, как cat или даже gzip). Но есть ли какие-либо переменные среды или другие средства (кроме сканирования репо для файла, который только что получает), чтобы получить путь обработанного файла?Как фильтр очистки/размытия определяет имя файла потока данных?

ответ

2

Фильтры очистки и смазывания вызывают один раз в файле с аргументами. A %f в аргументе расширяется до пути к файлу в соответствии с the documentation (сканирование немного внутри раздела filter).

Обратите внимание, что фильтр smudge не вызывается (или повторно вызывается) в некоторых случаях, которые вы ожидаете. Это включает git show (или так мне сказали, я не тестировал это).

+0

Спасибо, мои глаза, должно быть, перескочили через это ... поведение 'git show' имеет смысл, это эквивалентно' git cat-file -p' для blob, я думаю, и он показывает содержимое файл, так как git видит его (в «чистом» состоянии). Это также имеет смысл в свете параграфа «Одно использование фильтрации содержимого - это массаж содержимого в форме, которая более удобна для платформы, файловой системы и пользователя. Для этого режима работы ключевая фраза здесь «более удобно», а не «превращать что-то непригодное в употребление». –

+1

Еще две заметки. В разделе «merge» упоминается параметр «merge.renormalize» для запуска содержимого через фильтры во время слияния. Я не экспериментировал с этим. И кто-то (VonC?) Упоминал где-то, или я читал в какой-то документации, что, когда git преуспевает с простым двухсторонним слиянием (используя 'read-tree -m'), он иногда также не вызывает фильтры. – torek

+0

Не сливается ли действие слияния на совершенное, очищенное от фильтров содержимое _default_? Это на самом деле то, чего я ожидаю и чего хочу, и фильтр smudge-filter должен применяться только перед проверкой результата слияния. –