Remove large file in git history

2020-04-20

largeFileCheck.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 ', '

largeFileCheck.sh Result

All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file.
size    pack    SHA                                       location
221928  220165  1cc85c7b3eb1d7bd604add9e7112a83394a8d693  ccp/nps/ycl/bin.zip
85065   85065   cd80b2a868667f264cff2091c9431b5617abe702  mmp/mus/gradle/wrapper/dists/gradle-5.4.1-bin.zip
68128   26237   108dde14d33efc2a3050477cada15c01ae2e516e  ccp/ycl/cli/YNAClientEx.VC.db
68060   25732   acdde3065f37cc0230b9ed1644750ca5b2e262c5  ccp/ycl/cli/YNAClientEx/YNAClientEx.VC.db
47072   1932    9002e757c27f121adc51d407792f10c019e0a653  nsp/database/oracle/ORACLE_BASECODE_INSERT.SQL
39727   15939   c99d37fd7287079b324268734afdaff5cd627e03  ccp/nps/xed/src/main/resources/ffmpeg/ffmpeg.exe
23807   9175    01ee574bf35611552bbc4945834d7e9d8d5b288a  nsp/mas/map/ima/enpba/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement
21641   1802    554437bcdce2a336ac9f79906bd9e78e7243f671  ccp/nps/nws/database/nzmgr_snd_data_insert.sql
15650   2362    15b3a724f4ed65f9a21e65602755eba42caf4e24  ccp/nps/nws/YNANWS_WEB/WebContent/jsp/yh_news_jsp_20150204.tar
9562    1352    5a9ae36d11233f7d2c2f7ee6b1bd4bc1fc173480  ccp/cms/web/db/temp_insert_codedata.dmp

remove Large file in git history

//remove large file in git history
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

git log --diff

#mirror repository [ require : --mirror ]
git clone --mirror http://~~~/~~~/~~~.git

#폴더이동
cd meps.git

#파일 삭제 211MB
bfg --delete-files "bin.zip"

#같은 이름 파일 두개 66.53MB, 66.46MB
bfg --delete-files "YNAClientEx.VC.db"

git reflog expire --expire=now --all
git gc --prune=now --aggressive

#master 가 protected 인경우는 unprotected 처리후 push 가능함
git push