Использование черного с чистым фильтром git - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь настроить черный для запуска любых файлов, отмеченных в 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.

И файл не изменяется на диске. Что я делаю не так?

1 Ответ

0 голосов
/ 14 сентября 2018

В документации Black рекомендуется использовать ловушку перед фиксацией, а не смазывать и чистить фильтры.Обратите внимание, что filter.black.clean определяет чистый фильтр , и вы не настроили какие-либо грязные фильтры.

Причина, по которой вы не видите изменений в версии файла рабочего дерева, заключается в том, что чистыйФильтр используется при преобразовании версии файла рабочего дерева в индексную (подлежащую фиксации) версию файла.Это не влияет на версию файла рабочего дерева!

Фильтр размазки используется в противоположном направлении: Git имеет файл, который находится в индексе - по любой причине, например, потому что он был простокопируется в индекс как часть операции git checkout для переключения на конкретную фиксацию и желает преобразовать этот сжатый файл Git-ized в индексе в файл, который вы фактически можете увидеть и отредактировать в своем редакторе, илизапустить с python.В это время Git пропустит (распакованный) содержимое файла через ваш фильтр пятен.

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

В мире переформатирования кода можно было бы использовать clean filter , чтобы превратить все исходные файлы в какой-то канонический (возможно, четырехсторонний).форма пробела) и фильтр smudge для преобразования всех исходных файлов в предпочтительный формат (отступ с двумя пробелами или с восемью пробелами).Если бы все эти преобразования были полностью обратимыми, то, что вы бы увидели в своем рабочем дереве, было бы в вашем предпочтительном формате, а то, что другие увидят в их рабочих деревьях, будетих предпочтительный формат;но то, что увидит сама система контроля версий, будет каноническим, стандартизированным форматом.

Это не то, как на самом деле предназначены черные, хотя, вероятно, их можно использовать и таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...