GitHub 리포지토리 에는 언어로 작성된 프로젝트 의 백분율 을 표시하는 “언어 통계”가 표시 됩니다. 그러나 프로젝트가 몇 줄의 코드로 구성되어 있는지 표시하지는 않습니다. 종종 프로젝트의 규모와 복잡성에 대한 인상을 빨리 얻고 싶으며 코드 줄 수는 좋은 첫 인상을 줄 수 있습니다. 500 줄의 코드는 비교적 간단한 프로젝트를 의미하고, 100,000 줄의 코드는 매우 크고 복잡한 프로젝트를 의미합니다.
그렇다면 GitHub 리포지토리에서 다양한 언어로 작성된 코드 줄을 얻을 수 있습니까?
“ git 저장소 에서 줄 수 계산”질문은 로컬 Git 저장소에서 코드 줄을 계산하는 방법을 묻지 만 다음과 같습니다.
- 대규모 일 수있는 프로젝트를 복제해야합니다. 예를 들어 와인과 같은 프로젝트를 복제하는 데는 시간이 걸립니다.
- i13n 파일과 같이 코드가 아닐 수도있는 파일의 행을 계산합니다.
- 예를 들어 Ruby 파일 만 계산 하면 JavaScript와 같은 다른 언어로 된 대량의 코드를 놓칠 수 있습니다. 프로젝트에서 사용하는 언어를 미리 알고 있어야합니다. 또한 프로젝트에서 사용하는 모든 언어에 대해 카운트를 반복해야합니다.
대체로 이것은“프로젝트 규모를 신속하게 확인”하기에는 시간이 너무 많이 소요됩니다.
답변
쉘 스크립트 cloc-git
이 셸 스크립트를 사용하면 하나의 명령으로 원격 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
와 함께 설치할 수 있습니다 . 도 있습니다 에서 발표 된 고정 표시기 이미지 .mribeiro/cloc
코드를 파일에 저장하고 cloc-git
실행 chmod +x cloc-git
한 다음 파일을와 $PATH
같은 폴더로 이동 하여 스크립트를 설치할 수 있습니다 /usr/local/bin
.
용법
스크립트는 하나의 인수를 취하는데,이 인수 git clone
는 허용 할 URL입니다 . 예는 https://github.com/evalEmpire/perl5i.git
(HTTPS) 또는 git@github.com: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 에 따르면 실행 해야 합니다 . 작동시키지 못했습니다 ( 문제 # 2223 ).gem install linguist
linguist
답변
당신은 같은 것을 실행할 수 있습니다
git ls-files | xargs wc -l
총계를 줄 것입니다 →
또는이 도구를 사용하십시오 → http://line-count.herokuapp.com/
답변
에 대한 확장이 구글 크롬 브라우저 – GLOC 공공 및 민간의 repos 작동합니다.
프로젝트의 코드 줄 수를 다음에서 계산합니다.
- 프로젝트 상세 페이지
- 사용자의 저장소
- 조직 페이지
- 검색 결과 페이지
- 인기 페이지
- 페이지 탐색
답변
그래프 / 기고자 페이지로 이동하면 저장소에 대한 모든 기고자 목록과 추가 및 제거 된 행 수를 볼 수 있습니다.
내가 빠진 것이 아닌 한, 모든 기고자 사이에 추가 된 총 라인 수에서 삭제 된 총 라인 수를 빼면 리포지토리의 총 코드 라인 수를 산출해야합니다. (편집 : 결국 무언가가 누락 된 것으로 나타났습니다. 자세한 내용 은 orbitbot의 의견 을보십시오.)
최신 정보:
이 데이터는 GitHub의 API 에서도 사용할 수 있습니다 . 그래서 데이터를 가져 와서 계산을 수행하는 빠른 스크립트를 작성했습니다.
'use strict';
function countGithub(repo) {
fetch('https://api.github.com/repos/'+repo+'/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));
}
countGithub('jquery/jquery'); // or count anything you like
Chrome DevTools 스 니펫에 붙여넣고 리포지를 변경 한 후 실행을 클릭하십시오.
면책 조항 ( lovasoa 덕분에 ) :
일부 repos (sorich87 / bootstrap-tour)의 경우 음수 값을 나타내므로 GitHub의 API에서 반환 된 데이터에 문제가 있음을 나타낼 수 있으므로 소금 한 알을 사용하여이 방법의 결과를 가져옵니다.
최신 정보:
총 라인 수를 계산하는이 방법이 완전히 신뢰할 수있는 것은 아닙니다. 자세한 내용 은 orbitbot의 의견 을 살펴보십시오 .
답변
Github에서 사용하는 것과 동일한 소프트웨어 인 Linguist를 사용하여 최신 커밋을 복제 git clone --depth 1 <url>
한 다음 자체 분석을 수행 할 수 있습니다 . 그것이 당신이 코드 줄 을 얻는다는 것을 아는 유일한 방법 입니다.
또 다른 옵션은 API를 사용하여 프로젝트에서 사용하는 언어를 나열하는 것 입니다. 줄이 아니라 바이트 단위로 제공합니다. 예를 들어 …
$ curl https://api.github.com/repos/evalEmpire/perl5i/languages
{
"Perl": 274835
}
소금 한 덩어리로 가져가더라도 해당 프로젝트 에는 웹 사이트가 인정 하지만 API는 인정 하지 않는 YAML 및 JSON이 포함됩니다 .
마지막으로 코드 검색 을 사용 하여 특정 언어와 일치하는 파일을 요청할 수 있습니다. 이 예제는 perl5i의 어떤 파일이 Perl인지 묻습니다. https://api.github.com/search/code?q=language:perl+repo:evalEmpire/perl5i
. 줄을 제공하지 않으며 url
각 파일에 대해 반환 된 파일을 사용하여 파일 크기를 별도로 요청해야 합니다.
답변
현재 Github.com 또는 API에서 사용할 수 없습니다
고객 지원 센터에 문의하여 github.com에서이 작업을 수행 할 수 없음을 확인했습니다. 그들은 제안을 Github 팀에 전달했지만 앞으로도 가능할 것입니다. 그렇다면이 답변을 수정하십시오.
한편 Rory O’Kane의 답변 은 cloc
얕은 리포 클론을 기반으로 한 훌륭한 대안 입니다.
답변
GitHub API를 사용하여 다음 함수와 같은 슬로크를 얻을 수 있습니다
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 에서 다운로드 할 수 있습니다.