Pouvez-vous obtenir le nombre de lignes de code d'un dépôt GitHub?

dans un dépôt Github vous pouvez voir" Statistiques de langue", qui affiche le pourcentage du projet qui est écrit dans une langue. Il n'affiche cependant pas le nombre de lignes de code du projet. Souvent, j'ai envie d'obtenir rapidement une idée de l'ampleur et de la complexité d'un projet, et le nombre de lignes de code peuvent donner une bonne première impression. 500 lignes de code impliquent un projet relativement simple, 100 000 lignes de code impliquent un grand projet compliqué.

Alors, est-il possible d'obtenir les lignes de code écrites en différentes langues à partir d'un dépôt Github, de préférence sans le clonage?


à Cette question ( Compter le nombre de lignes dans un dépôt git ) demande à la manière de compter les lignes de code dans un dépôt Git local, mais:

  1. Vous devez cloner le projet, qui pourrait être massive. Clonage un projet comme le Vin, par exemple, prend une éternité.
  2. vous comptez les lignes dans les fichiers qui ne sont pas nécessairement codés, comme les fichiers i13n.
  3. si vous comptez juste (par exemple) les fichiers Ruby, vous pourriez manquer énorme quantité de code dans d'autres langues, comme Javascript. Vous devriez savoir à l'avance quelles langues le projet utilise. Vous devrez également répéter le comptage pour chaque langue utilisée dans le projet.

dans l'Ensemble, c'est potentiellement beaucoup trop de temps pour "vérifier rapidement l'échelle d'un projet".

247
demandé sur Pontus Magnusson 2014-11-12 10:26:48

9 réponses

un script shell, cloc-git

vous pouvez utiliser ce script shell pour compter le nombre de lignes dans un dépôt Git distant avec une commande:

#!/usr/bin/env bash
git clone --depth 1 "" temp-linecount-repo &&
  printf "('temp-linecount-repo' will be deleted automatically)\n\n\n" &&
  cloc temp-linecount-repo &&
  rm -rf temp-linecount-repo

Installation

ce script exige que CLOC ("Count Lines of Code") soit installé. cloc peut probablement être installé avec votre gestionnaire de paquets – par exemple, brew install cloc avec Homebrew .

vous pouvez installer le script en sauvegardant son code dans un fichier cloc-git , en lançant chmod +x cloc-git , puis en déplaçant le fichier dans un dossier dans votre $PATH tel que /usr/local/bin .

Utilisation

le script prend un argument, qui est n'importe quelle URL que git clone acceptera. Exemples: https://github.com/evalEmpire/perl5i.git (HTTPS) ou git@github.com:evalEmpire/perl5i.git (ssh). Vous pouvez obtenir cette URL à partir de n'importe quelle page de projet GitHub en cliquant sur "Clone 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
-------------------------------------------------------------------------------

Alternatives

exécuter les commandes manuellement

si vous ne voulez pas prendre la peine de sauvegarder et d'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

linguiste

si vous voulez que les résultats correspondent exactement aux pourcentages linguistiques de GitHub, vous pouvez essayer d'installer Linguiste au lieu de CLOC . Selon son README , vous devez gem install linguist et puis exécuter linguist . Je ne pouvais pas le faire fonctionner ( question n ° 2223 ).

186
répondu Rory O'Kane 2017-03-03 21:22:10

il y a 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 à partir de:

  • page de détail du projet
  • page des résultats de la recherche
  • tendance à la page
  • etc.

One repo Many repos

69
répondu Artem Solovev 2018-03-28 19:25:36

si vous allez à la page des graphiques/contributeurs, vous pouvez voir une liste de tous les contributeurs à la repo et le nombre de lignes qu'ils ont ajouté et supprimé.

à moins que je ne manque quelque chose, la soustraction du 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 la mise en pension. (EDIT: il s'avère qu'il me manquait quelque chose, après tout. Jetez un oeil au commentaire de orbitbot 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 faire 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));

il suffit de le coller dans un morceau de Chrome DevTools, changer la pension et cliquer Exécuter.

Disclaimer (merci à lovasoa ):

prendre le résultats de cette méthode avec un grain de sel, parce que pour certaines repos (sorich87 / bootstrap-tour) il en résulte des valeurs négatives, ce qui pourrait indiquer qu'il y a quelque chose de mal avec les données retournées de L'API de GitHub.

mise à jour:

semble que cette méthode pour calculer le nombre total de lignes n'est pas entièrement fiable. Jetez un oeil à le commentaire de orbitbot pour plus de détails.

60
répondu Lewis 2017-05-23 11:55:03

vous pouvez cloner juste la dernière propagation en utilisant git clone --depth 1 <url> puis effectuer votre propre analyse en utilisant Linguist , le même logiciel que Github utilise. C'est la seule façon de savoir que vous allez avoir lignes de code.

une autre option est utilisez L'API pour lister les langues que le projet utilise . Il ne les donne pas en lignes mais en octets. Exemple...

$ curl https://api.github.com/repos/evalEmpire/perl5i/languages
{
  "Perl": 274835
}

Bien que prendre cela avec un grain de sel, ce projet comprend YAML et JSON qui le site web reconnaît mais L'API ne le fait pas.

enfin, vous pouvez utiliser recherche de code pour demander quels fichiers correspondent à une langue donnée. Cet exemple demande quels fichiers dans perl5i sont 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 retourné pour chaque fichier.

31
répondu Schwern 2014-11-12 07:56:25

non actuellement possible sur Github.com ou leur API-s

j'ai parlé au service client et confirmé que cela ne peut pas être fait sur github.com. Ils ont transmis la suggestion à L'équipe de Github, donc espérons que ce sera possible à l'avenir. Si c'est le cas, je m'assurerai d'éditer cette réponse.

pendant ce temps, Rory O'Kane, la réponse de est une brillante alternative basée sur cloc et un peu pensions de clone.

30
répondu Hubro 2017-05-23 12:10:43

vous pouvez simplement exécuter quelque chose comme

git ls-files | xargs wc -l

qui vous donnera le nombre total →

lines of code

ou utilisez cet outil → http://line-count.herokuapp.com /

25
répondu Ahmad Awais 2018-09-14 10:10:34

vous pouvez utiliser L'API GitHub pour obtenir le sloc comme 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 fait une extension chrome qui montre le nombre de SLOC sur la liste de projets github et la page de détails du projet. Vous pouvez également configurer votre token d'accès personnel pour accéder aux dépôts privés et contourner la limite de débit de l'api.

vous pouvez télécharger d'ici https://chrome.google.com/webstore/detail/github-sloc/fkjjjamhihnjmihibcmdnianbcbccpnn

le code Source est disponible ici https://github.com/martianyi/github-sloc

11
répondu Yi Kai 2017-03-30 13:15:31

Firefox add-on Github SLOC

j'ai écrit un petit addon de firefox qui imprime le nombre de lignes de code sur les pages du projet github: GitHub SLOC

10
répondu lovasoa 2016-01-14 14:46:33

Si la question est "pouvez-vous rapidement obtenir le NOMBRE DE LIGNES d'un dépôt github", la réponse est non, comme indiqué par les autres réponses.

cependant, si la question Est "pouvez-vous rapidement vérifier L'échelle d'un projet", je mesure habituellement un projet en regardant sa taille. Bien sûr, la taille inclura les deltas de toutes les propagations actives, mais c'est une bonne métrique car l'ordre de grandeur est assez proche.

E. G.

Quelle est la taille du projet "docker"?

dans votre navigateur, entrez api.github.com/repos/ORG_NAME/PROJECT_NAME c'est à dire api.github.com/repos/docker/docker

dans le hachage de réponse, vous pouvez trouver l'attribut taille:

{
    ...
    size: 161432,
    ...
}

cela devrait vous donner une idée de l'ampleur relative du projet. Le nombre semble être en KO, mais quand je l'ai vérifié sur mon ordinateur, il est en fait plus petit, même bien que l'ordre de grandeur est cohérent. (161432KO = 161MB, du-s-h docker = 65MB)

7
répondu Jimmy Da 2015-03-31 00:22:54