느린 것을 걱정하지 말고, 멈춰서는 것을 걱정하라
article thumbnail

나는 현재 11번가라는 회사로 이직해서 다니고 있다. 내가 들어온팀은 기프티콘 개발팀인데, 팀의 히스토리가 참 재미있다. 본래 SKT에서 시작된 프로젝트였으나, SKP로 프로젝트가 이전되고 현재는 SKP와 11번가가 18년도에 분할하였고, 기프티콘 프로젝트는 11번가에 속하게된 프로젝트가 되었다.

 

그리고 해당 프로젝트의 경우 원래 외주를 주던 프로젝트였는데, 이 프로젝트를 11번가에서 직접맡아 관리를 하게 되면서 내재화를 하게 되었다. 외주를 맡기던 프로젝트다보니 많은 레거시가 있고 이를 리팩토링 및 최신화 하는것이 우리팀의 현재 목적이 아닐까 싶다.

 

각설하고, 이번 글을 쓰게된 계기는 특정 프로젝트의 PR이 올라와서 clone해오면서 프로젝트를 받아오게 되었는데 프로젝트의 용량이 무지막지하게 크다는 것이 문제가 되었다. 도대체 무슨일이지?? 하고 폴더별 용량을 봤더니, .git 폴더의 용량이 프로젝트의 용량보다 거의 10배 가까이 큰것이 발견되었다.

 

뭐가문제일까.. 대충 짐작가는 것은 현 프로젝트가 maven 프로젝트인데, maven build결과가 저장되는 target폴더가 .gitignore에 추가되어있지 않는 것이 문제였다.

 

.gitignore에 target폴더에 추가하더라도,, 기존에 push되던 것들은 어떻게 할 거인가... 그래서, 이에 PR상 댓글에 지혜를 구한결과,

팀장님께서 git 히스토리상에서 큰 파일을 찾아내는 방법과 파일을 삭제하는 방법을 알려주셨다.

 

용량많은 파일 찾는 방법

 

1. 프로젝트 루트경로에서 sh파일을 하나 만든다.

2. 아래 코드박스에 있는 코드들을 복사해서 sh파일에 붙여넣기한다.

3. sh파일에 chmod 700명령을 통해 권한을 준다.

4. sh 파일을 실행한다.

#!/bin/bash
#set -x 
# Shows you the largest objects in your repo's pack file.
# Written for osx.
#
# @see https://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/
# @author Antony Stubbs
# set the internal field separator to line break, so that we can iterate easily over the verify-pack output
IFS=$'\n';
# list all objects including their size, sort by size, take top 10
objects=`git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head`
echo "All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file."
output="size,pack,SHA,location"
allObjects=`git rev-list --all --objects`
for y in $objects
do
    # extract the size in bytes
    size=$((`echo $y | cut -f 5 -d ' '`/1024))
    # extract the compressed size in bytes
    compressedSize=$((`echo $y | cut -f 6 -d ' '`/1024))
    # extract the SHA
    sha=`echo $y | cut -f 1 -d ' '`
    # find the objects location in the repository tree
    other=`echo "${allObjects}" | grep $sha`
    #lineBreak=`echo -e "\n"`
    output="${output}\n${size},${compressedSize},${other}"
done
echo -e $output | column -t -s ', '

 

아니나 다를까.. target폴더가 많은 용량을 차지한다는 것을 알 수 있었다. 이에, 아래의 명령을 입력하여 해결을 하였다.

 

특정 파일 git 히스토리상에서 삭제하는 방법

$ brew installl git-filter-repo
$ git filter-repo --invert-paths --path [삭제할 파일경로]

 

profile

느린 것을 걱정하지 말고, 멈춰서는 것을 걱정하라

@주현태

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!