Я пытаюсь настроить черный для запуска в любых файлах, проверенных на git.
Я установил его следующим образом:
git config filter.black.clean 'black -'
echo '*.py filter=black' >> .git/info/attributes
Насколько я понимаю, это должно работать нормально, как черное с -
поскольку исходный путь будет считываться с STDIN
и выводиться на STDOUT
, что, по-моему, требует фильтра git.
Однако это не сработает. Когда я добавляю нечерный файл с git add
я вижу следующий вывод:
reformatted -
All done!
1 file reformatted.
И файл не изменяется на диске. Что я делаю неправильно?
В документации Black рекомендуется использовать привязку для предварительной фиксации, а не размывание и очистку фильтров. Обратите внимание, что filter.black.clean
определяет чистый фильтр, и вы не настроили никаких фильтров smudge.
Причина, по которой вы не видите изменения в дереве рабочей версии файла, заключается в том, что при преобразовании рабочей папки файла в индексную (файл) версию файла используется чистый фильтр. Это не влияет на рабочую версию файла!
Фильтр smudge используется в противоположном направлении: у Git есть файл, который находится в индексе, по какой-либо причине, например, потому что он просто скопирован в индекс как часть операции git checkout
чтобы переключиться на конкретную фиксацию и желания конвертировать этот встроенный в сжатый, Git-ized файл в тот, который вы можете увидеть и отредактировать в своем редакторе, или запустить с помощью python
. Git в это время запустит (скомпенсированное) содержимое файла через ваш фильтр smudge.
Обратите внимание, что если вы конвертируете содержимое файла, предварительное сжатие, в чистый фильтр, а затем извлекаете этот файл из репозитория, в индекс и включаете в свое рабочее дерево, вы в это время сможете увидеть, что произошло в чистом фильтре (при условии, что у вас нет компенсирующего фильтра смазки, который отменяет эффект).
В мире переформатирования кода можно было бы использовать чистый фильтр, чтобы превратить все исходные файлы в какую-то каноническую форму (возможно, с четырьмя пробелами) и фильтр smudge, чтобы превратить все исходные файлы в один предпочтительный формат (двух- пробел или восьмипозиционный отступ). Если эти преобразования полностью полностью обратимы, то, что вы увидите в своем рабочем дереве, будет в вашем предпочтительном формате, и то, что другие увидели бы на своих рабочих деревьях, было бы их предпочтительным форматом; но то, что увидит сама система управления версиями, будет каноническим стандартизованным форматом.
Это не то, как черным на самом деле предназначено для использования, хотя, вероятно, его можно использовать именно так.
GIT_TRACE
позволяет наблюдать за некоторыми внутренними действиями, включая запуск фильтров.