티스토리 뷰

개요

문득 일부 특정 소스 파일들만 자주 고쳐지고 있다는 생각이 들었고, 이 파일들의 기능을 분산하면 Git conflict나 문제점들을 줄일 수 있지 않을까 생각하게 되었습니다. 그래서 Git 이력을 통해 가장 많이 수정된 파일을 찾아 리스트업 해보려 하였습니다.

방법 조사

방법은 여러가지가 있겠지만 Stackoverflow에서 가장 점수를 잘 받은 커맨드 조합이 있었습니다. 원래 제시한 것은 아래와 같습니다. 다양한 의견 및 옵션들이 있으니 읽어보면 좋을 것 같네요.

git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10

출처: http://stackoverflow.com/questions/7686582/finding-most-changed-files-in-git

위 커맨드의 각 부분의 의미는 아래와 같습니다.

  • git log --pretty=format: --name-only
    • git log는 최근으로부터 과거로의 Git 이력을 출력합니다. 추가 옵션이 없으면 Commit id, Author, Message를 보여줍니다.
    • --pretty=format: 옵션은 정해진 Format에 따라 출력하여주는 것인데 여기에서처럼 아무것도 쓰지 않으면 아무것도 보여주지 않게 됩니다.
    • --name-only는 log 메시지 아래에 수정된 파일 리스트를 출력합니다.
    • 최종적으로 정리하자면, 파일 리스트만 출력하고 메시지는 출력하지 않게 됩니다.
  • sort
    • 아무 옵션 없이 sort를 하면 앞서 추출된 리스트를 오름차순 정렬합니다. 아래의 uniq -c 옵션이 연속적으로 등장해야지만 합져주어 미리 정렬을 해 주었습니다.
  • uniq -c
    • uniq 명령어는 각 줄에 동일한 텍스트가 연속되게 있으면 합쳐줍니다. -c 옵션은 count로서 합쳐진 각각의 텍스트가 몇개나 되는지 세줍니다.
  • sort -rg
    • 정렬을 하는데 r 옵션은 reverse이고 g 옵션은 general numeric으로 숫자 비교를 하겠다 입니다.
    • g 옵션은 빼도 무방하였습니다.
  • head -10
    • 상위 10개만 보여줍니다.

수정

git log --pretty=format: --name-only --since="2015-07-18"| grep ".java" | sort | uniq -c | sort -r > output.txt

  • 너무 오래 걸리는 문제가 발생하였습니다. 모든 커밋을 대상으로 하므로 오래 걸리는데, 날짜를 지정할 수 있어( --since) Gradle 변환 이후(2015-07-18)부터 측정하도록 옵션을 추가하였습니다. 대략 1년치가 대상이 됩니다.
  • 원안대로 하면 res아래의 xml과 같은 파일들도 모두 조사 대상이 됩니다. Sync나 Build tool에 의해 직접 수정하지 않은 파일들 까지 포함되므로 java 파일만 추출하도록 옵션을 추가하였습니다.
  • 전수 조사를 하기 위해 head 옵션은 제거하였습니다.
  • 파일로 저장하기 위해 > 을 사용하였습니다.

결과

운영중인 프로젝트라 자세히 밝히지는 않겠지만 다음과 같은 경향을 발견하였습니다.

  • 1년간 1회라도 수정된 Java 파일의 수는 400여개로 총 Java 파일의 90% 수준
  • 수정된 파일의 빈도수는 1800회, 백분위 상위 20%의 파일 갯수는 10개 수준, 2.5%의 상위 파일이 20%의 수정을 일으켰다.
  • 10회 이상 수정된 Java 파일의 갯수는 40개로 백분위 40% 수준
  • 파일 내 라인수와 비교해볼 때 라인수가 길면 수정 빈도수도 높은 경향이 있음

총평

  • 리스트업 된 파일명들을 보면 수긍이 가는 파일들이 대부분이다.
  • 기간별로 측정하여 trend를 나타내 보는 것도 재미있을 것 같다.
  • 파일 라인수를 늘리지 않도록 하고, 이미 큰 것들은 쪼갤 수 있는 방법을 찾아야 하겠다.
  • 파일 라인수 외에 다른 비교 요소는 없을지 생각해보아야 할 것 같다.


댓글
댓글쓰기 폼
«   2019/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
47,984
Today
12
Yesterday
16