GitHubリポジトリでは、言語で書かれたプロジェクトのパーセントを表示する「言語統計」を見ることができます。ただし、プロジェクトが何行のコードで構成されているかは表示されません。多くの場合、私はプロジェクトの規模と複雑さを素早く理解したいと思いますし、コードの行数が良い第一印象を与えることができます。 500行のコードは比較的単純なプロジェクトを意味し、10万行のコードは非常に大規模で複雑なプロジェクトを意味します。
それでは、できれば複製せずに、GitHubリポジトリからさまざまな言語で書かれたコード行を取得することは可能ですか?
“ gitリポジトリの行数を数える ”という質問は、ローカルGitリポジトリのコード行数を数える方法を尋ねていますが、
結局のところ、これは「プロジェクトの規模を素早くチェックする」には時間がかかりすぎる可能性があります。
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
はおそらくあなたのパッケージマネージャと一緒にインストールすることができます - 例えば Homebrew を付けたbrew install cloc
。
スクリプトをインストールするには、そのコードをファイルcloc-git
に保存し、chmod +x cloc-git
を実行してから、ファイルを$PATH
などの/usr/local/bin
内のフォルダーに移動します。
スクリプトは1つの引数を取ります。これはgit clone
が受け入れる任意のURLです。例は、https://github.com/evalEmpire/Perl5i.git
(HTTPS)または[email protected]:evalEmpire/Perl5i.git
(SSH)です。 「クローンまたはダウンロード」をクリックすると、どのGitHubプロジェクトページからでもこのURLを取得できます。
出力例
$ 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 に従って、gem install linguist
を実行してからlinguist
を実行する必要があります。うまく動かなかった( issue#2223 )。
Google Chromeブラウザ - _ gloc _ の拡張子があり、パブリックおよびプライベートリポジトリで動作します。
以下からプロジェクトのコードの行数を数えます。
あなたは簡単に何かを実行することができます
git ls-files | xargs wc -l
これで合計数がわかります→
またはこのツールを使用する→ http://line-count.herokuapp.com/ /
Graph/contributorsページに行くと、リポジトリへの全ての貢献者のリストとそれらが追加したり削除した行数を見ることができます。
足りない場合を除き、すべての貢献者の間で追加された総行数から削除された総行数を差し引くと、リポジトリ内のコードの総行数が得られます。 (編集:結局私は何かが足りなかったことがわかりました。詳細については orbitbotのコメント をご覧ください。)
更新:
このデータはGitHubの _ api _ でも入手できます。そこで、データを取得して計算するための簡単なスクリプトを作成しました。
'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));
Chrome DevToolsのスニペットに貼り付け、リポジトリを変更して[実行]をクリックするだけです。
免責事項( lovasoa のおかげで):
いくつかのリポジトリ(sorich87/bootstrap-tour)では負の値になるため、GitHubのAPIから返されたデータに問題がある可能性があるため、このメソッドの結果を塩の粒で見てください。
更新:
合計行数を計算するこの方法は、完全に信頼できるわけではありません。詳細については orbitbotのコメント をご覧ください。
git clone --depth 1 <url>
を使用して最新のコミットだけを複製してから、Githubが使用しているのと同じソフトウェアである Linguist を使用して独自の分析を実行できます。それが、私がコードの lines を取得することを私が知っている唯一の方法です。
もう1つのオプションは プロジェクトで使用されている言語をリストするためにAPIを使用する です。行単位ではなくバイト単位で指定します。例えば...
$ curl https://api.github.com/repos/evalEmpire/Perl5i/languages
{
"Perl": 274835
}
それを一粒の塩と考えても、そのプロジェクトは{ Webサイトが認めるYAMLとJSONを含む } _だが、APIはそうではない。
最後に、 code search を使用して、どのファイルが特定の言語に一致するかを尋ねることができます。この例では、Perl 5iのどのファイルがPerlであるかを尋ねます。 https://api.github.com/search/code?q=language:Perl+repo:evalEmpire/Perl5i
。それはあなたに行を与えないでしょう、そしてあなたはファイルごとに別々に返されるurl
を使ってファイルサイズを尋ねなければなりません。
私はカスタマーサポートに話しかけて、これがgithub.comではできないことを確認しました。しかし彼らはこの提案をGithubチームに渡しましたので、将来的には可能になると思います。もしそうなら、私は必ずこの答えを編集します。
一方、 Rory O'Kaneの答え は、cloc
と浅いリポジトリクローンに基づく素晴らしい代替案です。
次の関数のようにGitHub APIを使ってslocを取得できます。
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));
}
個人的に私はgithubプロジェクトリストとプロジェクト詳細ページの両方にSLOCの数を示すクロムエクステンションを作りました。プライベートリポジトリにアクセスしてapiレート制限を回避するように、パーソナルアクセストークンを設定することもできます。
あなたはここからダウンロードすることができます https://chrome.google.com/webstore/detail/github-sloc/fkjjjamhihnjmihibcmdnianbcbccpnn
ソースコードはこちらから入手できます https://github.com/martianyi/github-sloc
私はgithubプロジェクトのページにコードの行数を表示する小さなFirefoxアドオンを書きました: Github SLOC
質問が「できますかすばやく githubリポジトリの行数を取得してください」の場合、他の回答で述べられているように、答えは「いいえ」です。
しかし、質問が「できますか迅速にプロジェクトのスケールを確認してください」の場合、私は通常、プロジェクトのサイズを見てプロジェクトを評価します。もちろん、サイズにはすべてのアクティブなコミットからのデルタが含まれますが、大きさのオーダーは非常に近いため、適切なメトリックです。
例えば。
「docker」プロジェクトの大きさは?
ブラウザで、api.github.com/repos/ORG_NAME/PROJECT_NAMEと入力します。つまり、api.github.com/repos/docker/docker
応答ハッシュでは、サイズ属性を見つけることができます。
{
...
size: 161432,
...
}
これにより、プロジェクトの相対的な規模がわかります。数値はKBのように見えますが、コンピューターで確認すると、桁の大きさは一定ですが、実際には小さくなっています。 (161432KB = 161MB、du -s -h docker = 65MB)