642

GitHub リポジトリでは、言語で書かれたプロジェクトの割合を表示する「言語統計」を見ることができます。ただし、プロジェクトが何行のコードで構成されているかは表示されません。多くの場合、プロジェクトの規模と複雑さの印象をすぐに把握したいと思います。コードの行数は、良い第一印象を与えることができます。500 行のコードは比較的単純なプロジェクトを意味し、100,000 行のコードは非常に大規模で複雑なプロジェクトを意味します。

では、さまざまな言語で書かれたコード行を、できれば複製せずに GitHub リポジトリから取得することは可能でしょうか?


「<a href="https://stackoverflow.com/q/4822471/388916">git リポジトリの行数を数える」という質問は、ローカル Git リポジトリのコード行を数える方法を尋ねますが、

  1. プロジェクトを複製する必要がありますが、これは大規模になる可能性があります。たとえば、Wine のようなプロジェクトのクローン作成には時間がかかります。
  2. i13n ファイルのように、必ずしもコードではないファイルの行をカウントします。
  3. たとえば、Ruby ファイルだけを数えると、JavaScript などの他の言語の大量のコードを見逃す可能性があります。プロジェクトで使用する言語を事前に知っておく必要があります。また、プロジェクトで使用する言語ごとにカウントを繰り返す必要があります。

全体として、これは「プロジェクトの規模をすばやく確認する」には時間がかかりすぎる可能性があります。

4

18 に答える 18

412

シェルスクリプト、cloc-git

このシェル スクリプトを使用すると、1 つのコマンドでリモート Git リポジトリの行数をカウントできます。

#!/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

インストール

このスクリプトを実行するには、 CLOC (「Count Lines of Code」) をインストールする必要があります。clocおそらくパッケージマネージャーでインストールできます-たとえばbrew install clocHomebrew . で公開されている docker イメージmribeiro/clocもあります。

スクリプトをインストールするには、そのコードをファイルcloc-gitに保存して を実行chmod +x cloc-gitし、そのファイル$PATH/usr/local/bin.

使用法

スクリプトは引数を 1 つ取ります。これは、git clone受け入れられる任意の URL です。例はhttps://github.com/evalEmpire/perl5i.git(HTTPS) またはgit@github.com:evalEmpire/perl5i.git(SSH) です。この URL は、[複製またはダウンロード] をクリックして、任意の GitHub プロジェクト ページから取得できます。

出力例:

$ 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
-------------------------------------------------------------------------------

代替案

コマンドを手動で実行する

シェル スクリプトの保存とインストールに手間をかけたくない場合は、コマンドを手動で実行できます。例:

$ git clone --depth 1 https://github.com/evalEmpire/perl5i.git
$ cloc perl5i
$ rm -rf perl5i

言語学者

結果を GitHub の言語パーセンテージと正確に一致させたい場合は、 CLOCの代わりにLinguistをインストールしてみてください。その READMEによると、実行する必要があります。うまくいきませんでした ( issue #2223 )。gem install linguistlinguist

于 2015-03-12T14:43:30.283 に答える
92

グラフ/貢献者のページに移動すると、レポへのすべての貢献者のリストと、追加および削除された行数を確認できます。

私が何か不足していない限り、すべての貢献者の間で追加された総行数から削除された総行数を差し引くと、レポ内のコードの総行数が得られます。(編集:結局のところ、何かが欠けていたことがわかりました。詳細については、 orbitbot のコメントをご覧ください。)

アップデート:

このデータは GitHub のAPIでも利用できます。そこで、データを取得して計算を行う簡単なスクリプトを作成しました。

'use strict';

async function countGithub(repo) {
    const response = await fetch(`https://api.github.com/repos/${repo}/stats/contributors`)
    const contributors = await response.json();
    const lineCounts = contributors.map(contributor => (
        contributor.weeks.reduce((lineCount, week) => lineCount + week.a - week.d, 0)
    ));
    const lines = lineCounts.reduce((lineTotal, lineCount) => lineTotal + lineCount);
    window.alert(lines);
}

countGithub('jquery/jquery'); // or count anything you like

それを Chrome DevTools スニペットに貼り付け、リポジトリを変更して [実行] をクリックするだけです。

免責事項 ( lovasoaに感謝):

一部のリポジトリ (sorich87/bootstrap-tour) では負の値が返され、GitHub の API から返されたデータに問題があることを示している可能性があるため、このメソッドの結果は慎重に考えてください。

アップデート:

総行数を計算するこの方法は、完全には信頼できないようです。詳細については、orbitbot のコメントをご覧ください。

于 2015-08-22T09:03:00.363 に答える
43

Github が使用しているのと同じソフトウェアであるLinguistを使用して、最新のコミットのみを複製しgit clone --depth 1 <url>、独自の分析を実行できます。それが、コードを取得する唯一の方法です。

もう 1 つのオプションは、API を使用して、プロジェクトで使用する言語を一覧表示することです。行単位ではなく、バイト単位で提供されます。例えば...

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

そのプロジェクトには YAML と JSON が含まれており、Web サイトでは認識されていますが、API では認識されていません。

最後に、コード検索を使用して、特定の言語に一致するファイルを尋ねることができます。この例では、perl5i のどのファイルが Perl であるかを尋ねます。 https://api.github.com/search/code?q=language:perl+repo:evalEmpire/perl5i. url行は表示されず、ファイルごとに返された を使用して、ファイル サイズを個別に要求する必要があります。

于 2014-11-12T07:32:00.223 に答える
39

現在、Github.com またはその API では使用できません

カスタマー サポートに問い合わせたところ、これは github.com では実行できないことを確認しました。ただし、彼らは提案をGithubチームに伝えたので、将来的には可能になるでしょう. もしそうなら、私は必ずこの答えを編集します。

一方、Rory O'Kane の答えclocは、浅いレポ クローンに基づく素晴らしい代替案です。

于 2014-11-14T11:34:36.213 に答える
12

Firefox アドオンGithub SLOC

github プロジェクト ページにコードの行数を出力する小さな Firefox アドオンを作成しました: Github SLOC

于 2016-01-14T14:46:33.790 に答える
2

パブリックおよびプライベート リポジトリのコード行を、複製/ダウンロードせずにカウントする別のオンライン ツールがあります - https://klock.herokuapp.com/

スクリーンショット

于 2020-07-23T16:32:35.357 に答える