Je travaillais récemment sur un projet github en JavaScript et C++, et j'ai remarqué que github marquait le projet en C++. Si vous devez choisir une seule langue, c'est probablement la désignation correcte puisque le code C++ est compilé en tant que bibliothèque JavaScript, mais cela m'a fait me demander ... comment github détermine-t-il quelle langue étiqueter chaque projet?
Mise à jour d'avril 2013, par nuclearsandwich (équipe de support GitHub ou "supportocat"):
la page d'aide " Mon référentiel est marqué comme la mauvaise langue " mentionne l'utilisation de la bibliothèque de linguistes = pour déterminer la langue du fichier pour la coloration syntaxique et les statistiques de mise en pension. Linguist exclura certains noms de fichiers et chemins d'accès des statistiques, à l'exclusion de certains fichiers et répertoires de fournisseurs .
la page d'aide " Pourquoi ma langue préférée n'est-elle pas reconnue? " ajoute:
Si la langue de votre choix ne reçoit pas de coloration syntaxique, vous pouvez contribuer à la bibliothèque Linguist pour l'ajouter.
(Réponse originale, oct. 2012)
Ceci thread sur le support GitHub l'explique:
Il résume simplement la taille des fichiers pour chaque extension. Le plus gros "gagne".
Nous aimerions éviter d'ouvrir des fichiers et d'analyser leur contenu, car les deux ralentiraient le processus ... mais cela pourrait être la seule méthode pour résoudre des conflits comme celui-ci.
Comme ce n'est pas exact à 100%, cela a amené certains à ajouter:
Moi aussi, je voterais pour un simple interrupteur de priorité manuelle pour les cas où la supposition est fausse.
Remarque: comme Mark Rushakoff mentionne dans sa réponse (vote positif), les suppositions se sont améliorées depuis lors avec le projet linguiste (open-source à partir de juin 2011).
Vous pouvez voir qu'il y a encore des problèmes: GitHub Linguist Issues .
Voir ici pour plus de détails :
Une fois la langue détectée, elle est transmise à Albino , un wrapper Pygments , qui fait la mise en évidence de la syntaxe.
Et vous pouvez ajouter des directives linguistes dans un fichier .gitattributes .
Actuellement, Github projet linguiste est ce qui est utilisé pour déterminer les statistiques linguistiques, comme décrit dans ce blog Github (qui est sorti quelques mois après que cette question ait été posée à l'origine).
Tout d'abord, sachez que vous pouvez remplacer la langue détectée pour les fichiers de votre référentiel à l'aide de Linguist remplace .
Maintenant, en un mot,
Comment Linguist détecte-t-il les langues?
Le linguiste s'appuie sur le stratégies suivantes , dans l'ordre, et renvoie la langue dès qu'il a trouvé une correspondance parfaite (stratégie avec une seule langue retournée).
Makefile
).#!/bin/bash
Shebang sera classé comme Shell..h
) sont affinés par les stratégies suivantes.^[^#]+:-
pour Prolog ).Que sont les fichiers non distribués et les fichiers de documentation?
Linguist considère certains fichiers comme vendus, ce qui signifie qu'ils ne sont pas inclus dans les statistiques linguistiques. Ceux-ci incluent des bibliothèques tierces telles que jQuery et sont définis dans vendor.yml
fichier de configuration. Vous pouvez également éditer ou supprimer des fichiers dans votre référentiel à l'aide de Linguist remplace .
De même, les fichiers de documentation sont définis dans documentation.yml
et peut être modifié à l'aide de Linguist remplace .
Comment les fichiers générés sont-ils détectés?
Linguist s'appuie sur règles simples pour détecter les fichiers générés, en utilisant à la fois les chemins et le contenu des fichiers. Les fichiers générés ne sont pas comptés dans les statistiques linguistiques et ne sont pas affichés dans les différences sur github.com.
Qu'en est-il des langages de programmation et de balisage?
Dans Linguist, chaque langue reçoit un type. Ces types se trouvent dans le fichier de configuration principal, languages.yml
. Seuls les langages de programmation et de balisage sont comptabilisés dans les statistiques.
Après quelques bricolages avec linguiste je l'ai remarqué.
Pour les fichiers avec un ( Shebang , le Shebang est pris en compte lors de la détermination de la langue, mais semble être également pondéré par rapport aux autres jetons . Cela semble être une grosse erreur car le Shebang devrait définir définitivement la langue du fichier.
Cela peut entraîner problèmes avec la mise en surbrillance.