Hace poco estuve trabajando en un proyecto github en JavaScript y C++, y noté que github etiquetó el proyecto como C++. Si tiene que elegir un solo idioma, esta es probablemente la designación correcta ya que el código de C++ se compila como una biblioteca de JavaScript, pero esto me hizo preguntarme ... ¿cómo averigua Github qué idioma etiquetar cada proyecto?¿Cómo averigua github el lenguaje de un proyecto?
Respuesta
Actualización de abril de 2013, por nuclearsandwich (equipo de apoyo GitHub o "supportocat"):
la página de ayuda "My repository is marked as the wrong language" menciones usando ahora el linguist library para determinar el lenguaje de archivos para las estadísticas resaltado de sintaxis y de pases. El lingüista excluirá ciertos nombres de archivos y rutas de estadísticas, excluding certain vendor files and directories.
la página de ayuda "Why isn't my favorite language recognized?" añade:
Si el idioma deseado no está recibiendo resaltado de sintaxis que puede contribuir a la biblioteca lingüista para añadirlo.
(Respuesta original, octubre de 2012)
Este thread on GitHub support lo explica:
Simplemente resume los tamaños de archivo para cada extensión. El más grande "gana".
Nos gustaría evitar abrir archivos y analizar su contenido, ya que ambos ralentizarían el proceso ... pero ese podría ser el único método para resolver conflictos como este.
Dado que este no es fiable al 100%, que había conducido a algunos a añadir:
Yo también votaría por un simple interruptor manual-anulación para los casos en que la suposición es incorrecta.
Nota: como Mark Rushakoff menciones en his answer (upvoted), el adivinanzas mejoró desde entonces con el linguist project (desde junio 2011 de código abierto).
Puede ver que todavía hay problemas: GitHub Linguist Issues.
Ver here for more details:
Una vez que se ha detectado el idioma, se pasa a Albino, un envoltorio Pygments, lo que hace el resaltado de sintaxis real.
hilo de interés ... +1 por la información, gracias! –
Gracias por la información. Supongo que todavía no hay forma de modificar el idioma manualmente. – noob
¡Este ya no es el caso! Las respuestas a continuación con respecto al lingüista están más cerca de la marca. Consulte [Mi repositorio está marcado como el idioma incorrecto] (https://help.github.com/articles/my-repository-is-marked-as-the-wrong-language) y [¿Por qué no es mi idioma favorito? reconocido] (https://help.github.com/articles/why-isn-t-my-favorite-language-recognized) en http://help.github.com. Descargo de responsabilidad: trabajo en el equipo de soporte de GitHub. – nuclearsandwich
Las extensiones de archivo es lo primero que me viene a la mente.
Por supuesto, pero ... mi proyecto contenía archivos '.js' y' .cc', entre otras extensiones. –
En la actualidad, Github's linguist project es lo que se usa para determinar las estadísticas del lenguaje, como se describe en this Github blog post (que apareció unos meses después de que esta pregunta se realizó originalmente).
Excelente, no lo vi en el momento de mi respuesta. +1 – VonC
Después de algunos retoques con linguist I he notado esto.
Para los archivos con un Shebang, la Shebang se considera al determinar el idioma, pero parece ser uniformemente ponderado contra otra tokens. Esto parece ser un gran error porque el Shebang definitivamente debe definir el idioma del archivo.
Esto puede causar issues con resaltado.
Esta respuesta tiene varios enlaces rotos. Esto también es cierto para esta respuesta, ya que aparece en el intercambio de pila: http://webapps.stackexchange.com/a/40110. ¡Una pena, ya que me gustaría ver esos enlaces! – shmim
En primer lugar, sepa que puede anular el idioma detectado para los archivos en su repositorio usando Linguist overrides.
Ahora, en pocas palabras,
- Cada depósito tiene una etiqueta con la primera lengua de estadísticas del lenguaje.
- Las estadísticas del lenguaje cuentan el tamaño total de los archivos para cada lenguaje de programación o marcado detectado. Vendored, documentación y archivos generados no se cuentan.
- El idioma de cada archivo es detectado por el proyecto de código abierto Linguist.
¿Cómo detecta lingüista idiomas?
Linguist se basa en el following strategies, en el orden, y devuelve el idioma tan pronto como encontró una combinación perfecta (estrategia con un solo idioma devuelto).
- Busque Emacs and Vim modelines.
- Nombre de archivo conocido. Algunos nombres de archivos están asociados a idiomas específicos (piense en
Makefile
). - Busque un shebang. Un archivo con
#!/bin/bash
shebang se clasificará como Shell. - Extensión de archivo conocido. Los idiomas tienen un conjunto de extensiones asociadas. Sin embargo, hay muchos conflictos con esta estrategia. Los resultados conflictivos (piense en C++, C y Objective-C para
.h
) se refinan mediante las estrategias posteriores. - Un conjunto de heuristic rules. Por lo general, dependen de expresiones regulares sobre el contenido de los archivos para tratar de identificar el idioma (por ejemplo,
^[^#]+:-
for Prolog). - Un clasificador bayesiano ingenuo entrenado en sample files. Última estrategia, menor precisión. El clasificador bayesiano siempre toma un subconjunto de idiomas como entrada; no está destinado a clasificar entre todos los idiomas. Se devuelve la mejor coincidencia encontrada por el clasificador.
¿Qué son archivos de documentación y no presentados?
Linguist considera que algunos archivos como tienen, lo que significa que no están incluidos en las estadísticas de idioma. Estos incluyen bibliotecas de terceros como jQuery y se definen en el archivo de configuración vendor.yml
. También puede vender o deshacer archivos en su repositorio usando Linguist overrides.
De forma similar, los archivos de documentación se definen en documentation.yml
y se pueden cambiar usando Linguist overrides.
¿Cómo se detectan los archivos generados?
Linguist se basa en simple rules para detectar archivos generados, usando las rutas de acceso y el contenido de los archivos. Los archivos generados no se cuentan en las estadísticas del idioma y no se muestran en diffs en github.com.
¿Qué ocurre con la programación y los lenguajes de marcado?
En lingüista, cada idioma recibe un tipo. Estos tipos se pueden encontrar en el archivo de configuración principal, languages.yml
. Solo los lenguajes de programación y marcado se cuentan en las estadísticas.
- 1. partes clon de un proyecto github
- 2. ¿Cómo retiro mi proyecto de github?
- 3. después de horcar un proyecto github, ¿cómo puedo mantenerme actualizado con el proyecto original?
- 4. Cómo ver la diferencia de un proyecto github bifurcado
- 5. ¿Cómo generar estadísticas para un proyecto de GitHub?
- 6. Cómo importar un proyecto de Bitbucket a Github en Windows
- 7. Cómo integrar una wiki de GitHub en el proyecto principal
- 8. ¿Cómo cambio el proyecto de GitHub del que bifurqué?
- 9. Integración de Heroku y Github (cómo estructurar el proyecto)
- 10. Cómo obtener cierta confirmación del proyecto GitHub
- 11. ¿Cómo agrego todo mi proyecto en GitHub?
- 12. ¿Cómo uso Github para crear un proyecto totalmente separado de un proyecto anterior?
- 13. ¿Cómo puedo clonar un proyecto github para ejecutarlo localmente?
- 14. Subir mi proyecto a github
- 15. ¿Cómo puedo reflejar un proyecto alojado en launchpad en github?
- 16. ¿Enviar el parche al proyecto de Github sin clonar el depósito en Github?
- 17. implementación del proyecto github php
- 18. Alojando un subconjunto de impulso usado en proyecto en github
- 19. Etiquetado de un proyecto de GitHub a través de Jenkins
- 20. Importación de un proyecto de Scala desde github a Eclipse
- 21. Código de búsqueda dentro de un proyecto Github
- 22. Duplicación de un proyecto HG de Bitbucket a Github
- 23. proyecto clonado de github. heroku no funciona
- 24. Cómo usar el compositor con un proyecto github no packagista que contiene un paquete.json
- 25. ¿Agregar proyecto Xcode a github repo?
- 26. ¿Hay alguna manera de generar métricas para un proyecto github?
- 27. Escribir un gran proyecto utilizando lenguaje de programación J
- 28. proyecto github con submódulos clonando capistrano
- 29. CodeBlocks, GCC: cambiar el lenguaje del proyecto c y C++?
- 30. ¿Cómo uso etiquetas github para crear descargas para mi proyecto?
Puede considerarse afortunado. Estoy escribiendo un proyecto de Ruby on Rails, pero como uso Twitter Bootstrap, Github piensa que mi proyecto es Javascript, en lugar de Ruby –
@davblayn, creo que https://github.com/github/linguist/blob/ master/lib/linguist/vendor.yml resolvería su problema. También usar un CDN para bootstrap funcionaría. –
Esta pregunta parece estar fuera de tema porque no se trata de programación. Consulte [Qué temas puedo preguntar aquí] (http://stackoverflow.com/help/on-topic) en el Centro de ayuda. Tal vez [Web Apps Stack Exchange] (http://webapps.stackexchange.com/) sería un mejor lugar para preguntar. – jww