[git] GitHub 리포지토리에서 여러 줄의 코드를 얻을 수 있습니까?

GitHub 리포지토리 에는 언어로 작성된 프로젝트 의 백분율 을 표시하는 “언어 통계”가 표시 됩니다. 그러나 프로젝트가 몇 줄의 코드로 구성되어 있는지 표시하지는 않습니다. 종종 프로젝트의 규모와 복잡성에 대한 인상을 빨리 얻고 싶으며 코드 줄 수는 좋은 첫 인상을 줄 수 있습니다. 500 줄의 코드는 비교적 간단한 프로젝트를 의미하고, 100,000 줄의 코드는 매우 크고 복잡한 프로젝트를 의미합니다.

그렇다면 GitHub 리포지토리에서 다양한 언어로 작성된 코드 줄을 얻을 수 있습니까?


git 저장소 에서 줄 수 계산”질문은 로컬 Git 저장소에서 코드 줄을 계산하는 방법을 묻지 만 다음과 같습니다.

  1. 대규모 일 수있는 프로젝트를 복제해야합니다. 예를 들어 와인과 같은 프로젝트를 복제하는 데는 시간이 걸립니다.
  2. i13n 파일과 같이 코드가 아닐 수도있는 파일의 행을 계산합니다.
  3. 예를 들어 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 linguistlinguist


답변

당신은 같은 것을 실행할 수 있습니다

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 에서 다운로드 할 수 있습니다.

소스 코드는 https://github.com/martianyi/github-sloc에 있습니다.