Tag Archives: bfg repo cleaner

BFG Repo-Cleaner

Imamo jedan projekat čiji Git repozitorijum prelazi gigabajt. Nije da smo pisali toliko koda nego je neko u prošlosti pušovao damp baze i to u nekoliko verzija. Gledao sam malo na Internetu kako da izbacim te fajlove iz istorijata i naišao na alat BFG Repo-Cleaner. Ono što sam prvo uradio jeste da identifikujem nazive tih velikih fajlova. Ako kucam

git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5

dobijem nešto poput ovoga:

3b1c5bc5725a2c302c9f06880726b991888a70fd blob 131598074 131430037 2092808
063ea9501a3625043a430725f620c758e1c67263 blob 330905163 328218933 159853443
8305b7eade1bc8c5d0dcf12894ac8f7638739f49 blob 450726283 89486474 647119907
da4a5945f8437f5ffd247361afdbec339ab465d2 blob 822692719 149407372 497712358
b1c863c988710c6b1f521a71f75989072c4b8304 blob 2035593154 330974303 758214655

Da bih dobio nazive fajlova mogu da otkucam

git rev-list --objects --all | grep 8305b7eade1bc8c5d0dcf12894ac8f7638739f49
8305b7eade1bc8c5d0dcf12894ac8f7638739f49 dump.sql

Sada mogu da pristupim čišćenju repozitorijuma. Prvo ću da ga kloniram na novo mesto:

git clone --mirror git@gitlab.com:path/to/project.git

Onda pokrećem BFG i čistim repozitorijum:

java -jar bfg-1.14.0.jar --delete-files dump.sql project.git
cd project.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive

Na kraju ću da ga pušujem kao novi repozitorijum dok se ne uverim da sve radi kako treba:

git remote rename origin old-origin
git remote add origin git@gitlab.com:path/to/project-cleaned.git
git push --set-upstream origin --all
git push --set-upstream origin --tags