오늘 글은 아래에 관한 내용입니다.

image

GitHub 저장소를 사용하시는 분들은 아마 많이 보셨을 겁니다.

저장소에 올려진 파일을 분석, 언어별로 각각 비율이 어떠한지를 계산해서 저장소 메인 페이지에 게이지로 바로 표시해줍니다.

그리고 그 중에 비중이 가장 많은 언어는,

image

이렇게 저장소 목록에 그 프로젝트에서 대표적으로 사용된 언어로 표시됩니다.

“이 프로젝트는 ○○○ 프로젝트입니다.”라는 의미가 됩니다.

GitHub 전체적으로 통계를 낼 때도 이 자료가 사용되고, 특정 언어에 관심있는 다른 사용자들이 저장소를 발견할 가능성이 높아집니다.

그래서 언어 사용 비율은 GitHub 저장소에서 중요한 지표입니다.


문제: 내 프로젝트가 다른 엉뚱한 언어 프로젝트라고 나옵니다!!!

분명 어제까지만 해도,

image

이랬던 프로젝트가…

image

한순간에 이렇게 변해버렸습니다. (뭐? 내 프로젝트가 JavaScript라고?!)

졸지에 JavaScript 프로젝트가 되어버렸습니다. 하필이면 색깔도 제가 싫어하는 노란색이군요. 😔

원인이 뭐지…?

생각해보니 직전에 상당히 큰 사이즈의 js 파일을 저장소에 올렸습니다.

문제의 큰 사이즈 js 파일

기존 소스코드 파일들은 사이즈가 고만고만한 데 비해, 상대적으로 사이즈가 큰 써드파티 js 파일을 올려놓았으니 전체적으로 언어 구성 비율이 바뀐 것이었습니다.

결론: 파일 개수가 아니라 사이즈가 중요하다.


GitHub에 문의하기

그렇다고 올린 파일을 다시 지울 수도 없고, 다른 방법을 몰라서 GitHub에 문의해보기로 했습니다.

Help Center로 이동

image

영어, 중국어, 일본어… 네, 한국어는 없습니다. 😅

image

영어라서 FAQ가 눈에 잘 안 들어옵니다.

image

그냥 사람(?)에게 물어보겠습니다.

Contact us 클릭

image

열심히 영작(?)을 하였습니다.

image

몇 시간만에 답변이 돌아왔습니다.

요약하면 이렇습니다.

  • 언어 사용 통계는 전체 파일 사이즈의 비율로 집계된다.
  • Linguist라는 오픈소스 프로젝트(GitHub에서 개발)를 사용해서 통계를 추출한다.
  • 일부 파일을 통계에서 배제하는 등, Linguist를 커스터마이징하는 방법이 있다.

아, 그렇군요. 답변 감사합니다.

해결: JS 파일을 집계에서 배제하기

먼저 .gitattributes 파일을 만듭니다.

$ touch .gitattributes

파일 이름에서 Git과 관련이 있다는 것을 알 수 있습니다.

.gitignore가 버전관리를 하지 않을 파일을 열거하는 것이라면, .gitattributes은 파일에 속성(혹은 태그)을 부여하는 기능을 합니다.

Linguist가 알아볼 수 있는 의미있는 속성을 .gitattributes 파일을 통해 달아놓으면, 나중에 Linguist가 .gitattributes 파일을 해석해서 특정 파일을 집계에서 배제하든지, 다르게 처리를 하든지 하게 됩니다.

그럼 문제의 큰 사이즈 js 파일을 배제하겠습니다.

  • .gitattributes

    yarn-*.js linguist-vendored
    

애플리케이션 소스코드가 아니라 부가적인 설정 파일의 확장자가 js인 경우도 있는데, 그것들도 마찬가지로 집계에서 배제하도록 하겠습니다.

  • .gitattributes

    jest.config.js linguist-vendored
    yarn-*.js linguist-vendored
    

위의 두 가지 패턴에 일치하는 파일 목록에 linguist-vendored 속성을 달아주었습니다.

linguist-vendored 속성은 “이 파일은 Linguist에서 벤더 파일로 인식합니다.” 라는 의미입니다.

벤더 파일은 내가 작성한 파일이 아니라 그냥 따라붙는 파일(프레임워크 설정 파일, 외부 라이브러리 등)을 가리킵니다.

이제 .gitattributes 파일을 저장소에 푸시합니다.

결과

짜잔~!

image

js 파일을 배제했더니 이제 JavaScript는 나오지도 않고, 대신 Other 0.4% 라고만 나옵니다.

덕분에 99.6% TypeScript 프로젝트가 되었습니다.

image

또 이제 저장소 목록에도 다시 이렇게 나옵니다.

미션 완료.

배운 것

  • GitHub 저장소의 언어 사용 통계는 그 프로젝트 내의 전체 파일 사이즈 비율로 계산한다.
    • 파일 사이즈 > 파일 개수
  • GitHub 언어 사용 통계를 위한 오픈소스 라이브러리 Linguist가 있다.
  • .gitattributes 파일로 Linguist를 커스터마이징 할 수 있다.

읽어주셔서 감사합니다.


References