Dans un référentiel GitHub, vous pouvez voir les “statistiques de langue”, qui affichent le pourcentage du projet écrit dans une langue. Cependant, il n’affiche pas le nombre de lignes de code composant le projet. Souvent, je souhaite avoir rapidement une idée de l'ampleur et de la complexité d'un projet. Le nombre de lignes de code peut donner une bonne première impression. 500 lignes de code impliquent un projet relativement simple, 100 000 lignes de code impliquent un projet très volumineux/compliqué.
Alors, est-il possible d’obtenir les lignes de code écrites dans les différentes langues à partir d’un référentiel GitHub, de préférence sans le cloner?
La question " Compter le nombre de lignes dans un référentiel Git " demande comment compter les lignes de code dans un référentiel Git local, mais:
Globalement, cela prend potentiellement trop de temps pour "vérifier rapidement l’ampleur d’un projet".
cloc-git
Vous pouvez utiliser ce script Shell pour compter le nombre de lignes d'un référentiel Git distant à l'aide d'une seule commande:
#!/usr/bin/env bash
git clone --depth 1 "$1" temp-linecount-repo &&
printf "('temp-linecount-repo' will be deleted automatically)\n\n\n" &&
cloc temp-linecount-repo &&
rm -rf temp-linecount-repo
Ce script nécessite l’installation de CLOC ("Compter les lignes de code"). cloc
peut probablement être installé avec votre gestionnaire de paquets - par exemple, brew install cloc
avec Homebrew . Il y a aussi ne image de menu fixe publiée sous mribeiro/cloc
.
Vous pouvez installer le script en enregistrant son code dans un fichier cloc-git
, en exécutant chmod +x cloc-git
, puis en le déplaçant dans un dossier de votre $PATH
tel que /usr/local/bin
.
Le script prend un argument, qui est toute URL que git clone
acceptera. Les exemples sont https://github.com/evalEmpire/Perl5i.git
(HTTPS) ou [email protected]:evalEmpire/Perl5i.git
(SSH). Vous pouvez obtenir cette URL à partir de n’importe quelle page de projet GitHub en cliquant sur "Cloner ou télécharger".
Exemple de sortie:
$ cloc-git https://github.com/evalEmpire/Perl5i.git
Cloning into 'temp-linecount-repo'...
remote: Counting objects: 200, done.
remote: Compressing objects: 100% (182/182), done.
remote: Total 200 (delta 13), reused 158 (delta 9), pack-reused 0
Receiving objects: 100% (200/200), 296.52 KiB | 110.00 KiB/s, done.
Resolving deltas: 100% (13/13), done.
Checking connectivity... done.
('temp-linecount-repo' will be deleted automatically)
171 text files.
166 unique files.
17 files ignored.
http://cloc.sourceforge.net v 1.62 T=1.13 s (134.1 files/s, 9764.6 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Perl 149 2795 1425 6382
JSON 1 0 0 270
YAML 2 0 0 198
-------------------------------------------------------------------------------
SUM: 152 2795 1425 6850
-------------------------------------------------------------------------------
Si vous ne souhaitez pas enregistrer et installer le script Shell, vous pouvez exécuter les commandes manuellement. Un exemple:
$ git clone --depth 1 https://github.com/evalEmpire/Perl5i.git
$ cloc Perl5i
$ rm -rf Perl5i
Si vous voulez que les résultats correspondent exactement aux pourcentages de langue de GitHub, vous pouvez essayer d’installer Linguist au lieu de CLOC . Selon son fichier README , vous devez gem install linguist
, puis exécuter linguist
. Je ne pouvais pas le faire fonctionner ( numéro # 222 ).
Vous pouvez simplement exécuter quelque chose comme
git ls-files | xargs wc -l
qui vous donnera le nombre total →
Ou utilisez cet outil → http://line-count.herokuapp.com/
Il existe une extension pour Google Chrome navigateur - GLOC qui fonctionne pour les pensions publiques et privées. .
Compte le nombre de lignes de code d'un projet de:
Si vous accédez à la page graphiques/contributeurs, vous pouvez voir une liste de tous les contributeurs au référentiel et le nombre de lignes qu'ils ont ajoutées et supprimées.
À moins que quelque chose ne me manque, soustraire le nombre total de lignes supprimées du nombre total de lignes ajoutées parmi tous les contributeurs devrait donner le nombre total de lignes de code dans le référentiel. (EDIT: il s’avère qu’il me manque quelque chose après tout. Regardez commentaire d’orbbitbot pour plus de détails.)
MISE À JOUR:
Ces données sont également disponibles dans API de GitHub. J'ai donc écrit un script rapide pour récupérer les données et effectuer le calcul:
'use strict';
//replace jquery/jquery with the repo you're interested in
fetch('https://api.github.com/repos/jquery/jquery/stats/contributors')
.then(response => response.json())
.then(contributors => contributors
.map(contributor => contributor.weeks
.reduce((lineCount, week) => lineCount + week.a - week.d, 0)))
.then(lineCounts => lineCounts.reduce((lineTotal, lineCount) => lineTotal + lineCount))
.then(lines => window.alert(lines));
Collez-le simplement dans un fragment de code Chrome DevTools, modifiez le référentiel et cliquez sur Exécuter.
Disclaimer (merci à lovasoa ):
Prenez les résultats de cette méthode avec un grain de sel, car pour certains repos (sorich87/bootstrap-tour), il en résulte des valeurs négatives, ce qui peut indiquer un problème avec les données renvoyées par l'API de GitHub.
MISE À JOUR:
On dirait que cette méthode pour calculer le nombre total de lignes n'est pas entièrement fiable. Jetez un oeil à commentaire d'orbbitbot pour plus de détails.
Vous pouvez uniquement cloner la dernière validation à l'aide de git clone --depth 1 <url>
puis effectuer votre propre analyse à l'aide de Linguist , à l'aide du même logiciel que Github. C'est la seule façon dont je sais que vous allez obtenir des lignes de code.
Une autre option consiste à tilisez l’API pour répertorier les langues utilisées par le projet . Cela ne les donne pas en lignes mais en octets. Par exemple...
$ curl https://api.github.com/repos/evalEmpire/Perl5i/languages
{
"Perl": 274835
}
Bien que cela prenne avec un grain de sel, ce projet inclut YAML et JSON, ce que le site Web reconnaît mais pas l'API.
Enfin, vous pouvez utiliser recherche de code pour demander quels fichiers correspondent à une langue donnée. Cet exemple demande quels fichiers de Perl5i sont des fichiers Perl. https://api.github.com/search/code?q=language:Perl+repo:evalEmpire/Perl5i
. Il ne vous donnera pas de lignes et vous devez demander la taille du fichier séparément en utilisant le url
renvoyé pour chaque fichier.
J'ai parlé au service clientèle et confirmé que cela ne pouvait pas être fait sur github.com. Cependant, ils ont transmis la suggestion à l'équipe Github, alors j'espère que cela sera possible à l'avenir. Si c'est le cas, je serai sûr de modifier cette réponse.
Pendant ce temps, réponse de Rory O'Kane est une alternative brillante basée sur cloc
et un clone de dépôt peu profond.
Vous pouvez utiliser l'API GitHub pour obtenir le sloc comme pour la fonction suivante
function getSloc(repo, tries) {
//repo is the repo's path
if (!repo) {
return Promise.reject(new Error("No repo provided"));
}
//GitHub's API may return an empty object the first time it is accessed
//We can try several times then stop
if (tries === 0) {
return Promise.reject(new Error("Too many tries"));
}
let url = "https://api.github.com/repos" + repo + "/stats/code_frequency";
return fetch(url)
.then(x => x.json())
.then(x => x.reduce((total, changes) => total + changes[1] + changes[2], 0))
.catch(err => getSloc(repo, tries - 1));
}
Personnellement, j’ai créé une extension chrome qui indique le nombre de SLOC sur la liste de projets github et sur la page de détails du projet. Vous pouvez également configurer votre jeton d'accès personnel pour accéder aux référentiels privés et contourner la limite de débit de l'API.
Vous pouvez télécharger à partir d'ici https://chrome.google.com/webstore/detail/github-sloc/fkjjjamhihnmimidnianbcbccpnn
Le code source est disponible ici https://github.com/martianyi/github-sloc
J'ai écrit un petit addon firefox qui affiche le nombre de lignes de code sur les pages du projet github: Github SLOC
Si la question est "pouvez-vous rapidement obtenir NOMBRE DE LIGNES d'un dépôt github", la réponse est non, comme indiqué dans les autres réponses.
Toutefois, si la question est "pouvez-vous rapidement vérifier l’échelle d’un projet", j’évalue généralement un projet en regardant sa taille. Bien sûr, la taille inclura les deltas de tous les commits actifs, mais il s’agit d’une bonne métrique car son ordre de grandeur est assez proche.
Par exemple.
Quelle est la taille du projet "docker"?
Dans votre navigateur, entrez api.github.com/repos/ORG_NAME/PROJECT_NAME i.e. api.github.com/repos/docker/docker
Dans le hachage de réponse, vous pouvez trouver l'attribut size:
{
...
size: 161432,
...
}
Cela devrait vous donner une idée de l’ampleur relative du projet. Le nombre semble être en Ko, mais lorsque je l'ai vérifié sur mon ordinateur, il est en fait plus petit, même si l'ordre de grandeur est cohérent. (161432KB = 161Mo, docker du -s -h = 65Mo)