Есть, но это в меру болезненно: добавляйте каждый файл, который вы изменяете, по одному, к .gitattributes
, чтобы указать его (по пути) в виде текста.То есть, вы начнете с .gitattributes
чтения:
* binary
Затем, когда вы (или кто-либо другой) работаете с каким-либо файлом с именем, скажем, dir/sub/phile.ext
, вы также отредактируете .gitattributes
читать:
* binary
dir/sub/file.ext text
, чтобы с этого момента в файле с этим одним конкретным именем все окончания строк были нормализованы.
Когда вы отредактировали1352 из 3000 файлов, ваш .gitattributes
будет содержать 1353 строки: 1352 для файлов плюс * binary
впереди.В какой-то момент (около 1500 из 3000 файлов) будет проще инвертировать список: перечислите каждый файл, который не является , который будет рассматриваться как текст, с * text
строкой впереди.С этого момента каждый раз, когда вы редактируете файл, удаляет его из .gitattributes
.Когда вы отредактировали 2999 из 3000 файлов, ваш .gitattributes
будет уменьшен до двух строк:
* text
path/to/never-edited.zog binary
Обратите внимание, что вы можете разбить один большой .gitattributes
файл на более мелкие файлы, по одному наподкаталог: если вы отредактировали каждый файл в dir/sub
на данный момент, вы можете убрать их из верхнего уровня .gitattributes
и dir/sub/.gitattributes
перечислить все его файлы как * text
, например.
Ключом к этому является то, что последняя совпадающая строка для некоторого атрибута применяется к файлу, а .gitattribute
файлы считываются сначала с верхнего уровня, вплоть до самого конкретного подкаталога, последнегопоэтому строки верхнего уровня .gitattributes
переопределяются dir/.gitattributes
строками, которые, в свою очередь, переопределяются dir/sub/.gitattributes
строками при работе с файлами в dir/sub
.
.