Github repository 페이지의 우측에는 해당 repo의 언어 통계인 Languages가 있습니다. 이는 페이지에 접근한 사용자로 하여금 이 프로젝트가 어떤 언어를 주력으로 구성되었는지 확인할 수 있는 지표가 되고, 일부 도구들은 이 데이터를 기반으로 오픈소스 프로젝트들을 분류하기도 합니다.
Problem
다만 Github가 이 Languages의 통계를 측정하는 방법은 Linguist 라는 오픈소스 도구를 이용하여 해당 Repo의 전체 파일 사이즈 중 해당 확장자가 차지하는 비율을 계산해서 통계를 만듭니다.
즉 서비스 Repo 내 Javascript, HTML, CSS 등 Resource 성 파일들의 사이즈가 큰 경우 해당 프로젝트의 주력 언어와는 다르게 Javascript 등으로 표기됩니다.
Solution
해결 방법은 간단합니다. .gitattributes
라는 파일을 repo의 root에 위치하게 되면 Linguist 해당 파일을 참고하여 처리를 진행합니다. 마치 불필요한 파일을 업로드 하지 않기 위해 사용하는 .gitignore
와 유사하죠.
아무튼 .gitattributes
에 정규식과 함께linguist-vendored
라는 키워드를 통해 통계에서 제외할 파일을 지정할 수 있습니다. linguist-vendored=false
와 같이 명시된 파일들은 반대로 무조건 추적되는 키워드가 되겠죠.
# .gitattributes 파일 내용입니다.
*.js linguist-vendored
*.go linguist-vendored=false
그래서 이 파일을 작성 후 업로드해보면 Javascript가 제외된 통계가 Languages에 반영된 것을 볼 수 있습니다.
More.. Then what’s gitattributes?
위에서 Linguist가 참고하는 파일 정도로 이야기를 드렸지만, 사실 gitattributes 파일이 답고 있는 기능은 조금 더 많습니다. git 공식 문서에 보면 gitattributes는 이렇게 한줄로 설명되어 있습니다.
gitattributes - Defining attributes per path
결국 path 별로 attribute를 지정해줄 수 있는 파일이라고 보시면 되는데, 위에서 작성한 형태와 같이 파일 패턴에 대한 속성 명시를 위해 사용합니다.
파일패턴 속성
자세한건 공식 문서를 한번 읽어보시면 어떻게 더 활용할 수 있는지 확인하실 수 있고, gitignore와 같이 언어별로 자동 생성해주는 https://gitattributes.io 도 존재합니다.
References
- https://git-scm.com/docs/gitattributes
- https://www.notion.so/Github-aa820aaf825844c0bcd2de50c033c554#2fe3edb0752544829eaa9b14fbb7f990
- https://gitattributes.io/