본문 바로가기

카테고리 없음

Github LFS 저장공간 확보

반응형

개발을 하다보면 종종 100MB가 넘는 파일을 Github에 push해야 할 때가 있다.

그럴때 사용하는게 LFS이다. 한번이라도 GIthub에 100MB넘는 파일을 LFS를 이용해서 업로드하면 

계속 history에 남는다. 나중에 그 파일을 지우고 github에 push를 하더라도 계속 남는다. 

이걸 계속하다보니 어느새  1GB LFS 저장공간을 넘어섰고 결제를 진행할 수 밖에 없었다.

이걸 해결하기 위해선 Github support 팀에 직접 연락을 해야한다.

나는 위와 같이 답장이 왔고 받은 메일을 번역하자면 아래와 같다.

  • 우리가 서버에서 파일들을 지워야 하므로 LFS로 tracking 했던 모든 파일중 어떤 것을 지우고 싶은지 얘기해줘라(아니면 다 지울 수 있는데 살리고 싶은것들을 알려줘라, 너의 편한대로)
  • git lfs ls-files --all --long   이 명령어로 너가 여태까지 LFS로 관리했던 파일 목록들 확인 할 수 있으니 참고해라
  • 우리한테 알려준 이후 너도 너의 repository history 에서 그 파일들을 싹 다 삭제해라

참고로 history중 특정 파일 삭제하는 명령어는 

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <path to file>' --prune-empty --tag-name-filter cat -- --all

이거다 .

만약 *.conf 파일을 삭제하고자 한다면 아래와 같이 *.conf로 지정하면 된다

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.conf' --prune-empty --tag-name-filter cat -- --all

다 삭제했으면 

git push origin master --force

위 명령어로 push 해주자.

 

+++

만약 위에 filter branch말고 다른 명령어를 사용하고 싶다면

 

https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository#fully-removing-the-data-from-github

 

Removing sensitive data from a repository - GitHub Docs

The git filter-repo tool and the BFG Repo-Cleaner rewrite your repository's history, which changes the SHAs for existing commits that you alter and any dependent commits. Changed commit SHAs may affect open pull requests in your repository. We recommend me

docs.github.com

위의 링크를 참고해보자. github docs 주소인데 sesitive data(보안관련)들을 repository history에서 삭제시키는 방법을 라려준다.

"bfg"명령어 라고 더욱 filter branch 명령어보다 훨씬 간단하고 빠르다.

참고로 따로 다운을 받아줘야 한다.

 

필자는

java -jar bfg-1.14.0.jar --delete-files Stage.unity

이렇게 직접 파일의 히스토리? 내역?을 지워줬다. 뭐 사용법에서는 맨뒤에 my-repo.git을 붙이라는데 필자는 그냥 그 repo에서 git bash를 켜줘서 그런건 필요없었다. 또한 뭐 brew 명령어를 통해서 bfg를 다운받아주면 java -jar bfg-1.14.0.jar이 "bfg"로 alias 된다는데 나는 그런거 없이 그냥 bfg-1.14.0.jar파일을 repo에 박아줬다. 

 

 

 

절차를 잘 진행하면 Github Support팀에서 서버에서 LFS파일들을 다 삭제했다고 알려준다.

참고로 나는 2개는 진짜로 필요했기 때문에 2개 파일은 살려달라고 알려줬다. \

참고로 파일의 진짜 이름이 아니라 무슨 object ID를 알려줘야하는데 살리고싶은 파일의 object ID는 

git lfs ls-files --all --long

이 명령어로 알 수 있다.

 

GitHub Support team에서 지워주기 전
지워준 후

p.s 아니 근데 세계 최고의 Microsoft에서 운영하는 Github인데 이렇게 일일이 support team에 연락해서 삭제해달라고 얘기해야된다고????? 

 

 

 

반응형