Пути, не исключенные из языковой статистики Github

Я уже читал о связанных потоках SO здесь и здесь, а также Github Linguist ручное переопределение, но я не могу исключить некоторые каталоги верхнего уровня из языковой статистики.

В последней версии это репозиторий показывает преобладание HTML-кода. Нажав на детали HTML, вы увидите два HTML-файла:

  • packages/NUnit.2.5.7.10213/NUnitFitTests.html
    Последний раз индексировался 30 декабря 2016 г.

  • packages/NUnit.2.5.7.10213/Tools/NUnitFitTests.html
    Последний раз индексировался 30 декабря 2016 г.

но они должны быть частью исключенных путей в .gitattributes:

.nuget/* linguist-vendored
libs/* linguist-vendored
NUnit.Runners.2.6.4/* linguist-vendored
packages/* linguist-vendored             §§ <--- this one in particular
RubyInstallationFiles/* linguist-vendored

Но на той же странице сведений ранжирование в левом нижнем углу четко показывает HTML на более низком месте, в то время как C# находится наверху:

введите здесь описание изображения

Что я делаю не так?

Дополнительный вопрос: среди многих изменений я также удалил комментарии из файла .gitattribute, так как я не мог найти ни в одной ссылке, разрешены ли они или что. Кто-нибудь знает, можно ли оставлять там комментарии? Какой формат? ТА


person superjos    schedule 02.03.2017    source источник


Ответы (2)


Вы можете проверить атрибуты с помощью git-check-attr и убедиться, что они установлены правильно вы думаете, что они.

$ git check-attr --all -- packages/NUnit.2.5.7.10213/NUnitFitTests.html
$

Кажется, что у него нет атрибутов. Проблема в том, что packages/* не является рекурсивным.

$ git check-attr --all -- packages/NUnit.2.5.7.10213/
packages/NUnit.2.5.7.10213/: linguist-vendored: set

Итак, каковы правила для шаблонов? То же, что и для gitignore.

Правила соответствия шаблона путям такие же, как и в файлах .gitignore; см. gitignore(5). В отличие от .gitignore, отрицательные шаблоны запрещены.

То, что вы ищете, это /**.

Завершающий "/**" соответствует всему внутри. Например, «abc/**» соответствует всем файлам внутри каталога «abc» относительно местоположения файла .gitignore с бесконечной глубиной.

Вносим это исправление...

$ cat .gitattributes 
.nuget/** linguist-vendored
libs/** linguist-vendored
NUnit.Runners.2.6.4/** linguist-vendored
packages/** linguist-vendored
RubyInstallationFiles/** linguist-vendored

А теперь у нас все хорошо.

$ git check-attr --all packages/NUnit.2.5.7.10213/NUnitFitTests.html
packages/NUnit.2.5.7.10213/NUnitFitTests.html: linguist-vendored: set

Это также отвечает на ваш вопрос о комментариях...

Строка, начинающаяся с #, служит комментарием. Поместите обратную косую черту ("\") перед первой решеткой для шаблонов, начинающихся с решетки.

person Schwern    schedule 02.03.2017
comment
Я понимаю. Не знал, что он имеет тот же синтаксис glob, что и .gitignore. Теперь меня сбивает с толку то, что во всех примерах документы показывают только один *. Кроме того, я не знал о команде git check-attr, спасибо. - person superjos; 02.03.2017
comment
Двойные звездочки на самом деле не нужны в конце путей для Linguist. - person pchaigno; 13.08.2017
comment
@pchaigno Это решение принимает не лингвист, а Git. Git применяет атрибуты. Лингвист спрашивает Git, какие атрибуты есть у файла. Атрибуты не применяются без двойных звездочек. Документы Linguist говорят Добавьте файл .gitattributes в свой проект и используйте стандартные Сопоставители путей в стиле git для файлов, которые вы хотите переопределить, чтобы установить лингвистическую документацию, лингвистический язык, лингвистический поставщик и лингвистический сгенерированный. - person Schwern; 14.08.2017
comment
У меня та же интерпретация документации, что и у вас, но после тестирования как с атрибутами .gitignore, так и с атрибутами Linguist, похоже, что один * в конце пути интерпретируется точно так же, как **. Я что-то упускаю? Документация неверна (в частности, обратите внимание на /* — без косой черты подстановочный знак также исключил бы все содержимое foo/bar)? - person pchaigno; 14.08.2017
comment
@pchaigno Я пробовал packages/* linguist-vendored и packages/ linguist-vendored в .gitattributes и git check-attr --all -- packages/NUnit.2.5.7.10213/NUnitFitTests.html ничего не возвращал с git 2.13.1. Я не управлял Лингвистом. Обратите внимание, что .gitignore уже игнорирует **/packages/*. - person Schwern; 14.08.2017
comment
Я могу подтвердить вывод git check-attr. Мне кажется, он тоже не распознает *. Однако и Linguist, и .gitignore распознают его в конце путей. Например, если у меня есть test1/* в моем .gitignore, файл test1/test2/test.html игнорируется. - person pchaigno; 14.08.2017
comment
Через 1000 лет directory/* linguist-vendored у меня не сработало, а directory/** linguist-vendored сработало. - person Seth Lutske; 08.04.2021

Может произойти несколько вещей:

Языковая статистика еще не обновлена. Задание определения языка выполняется как низкоприоритетное фоновое задание. Обновление языковой статистики может занять некоторое время (до суток).

Вы пропустили некоторые HTML-файлы. Результаты поиска, показывающие файлы для каждого языка, кэшируются и не всегда актуальны. Поэтому в вашем репозитории могут быть некоторые HTML-файлы, которые вы забыли предоставить.


Как выполнять отладку? Лучше всего запускать Linguist локально. Если у вас есть рабочая среда Ruby, это так же просто, как:

gem install github-linguist
linguist /path/to/your/repository --breakdown

Эта команда выведет результаты Linguist с файлами, обнаруженными для каждого языка, и вычисленными процентами.


Примечание. Ваш синтаксис .gitattributes правильный, не нужно удваивать звездочки. Двойные звездочки в конце пути для Linguist не нужны. Однако вам может понадобиться, чтобы они соответствовали нескольким каталогам в начале пути с подстановочными знаками, например:

**/NSpec/Domain/Formatters/Templates/*
person pchaigno    schedule 12.08.2017