tech

git repository file history 전부 삭제

박진만 2023. 5. 22. 00:04
반응형

개인 프로젝트 소스를 private repository 에 중요한 데이터까지 전부 push 해서 관리 중입니다. 요즘은 개발자 입사 지원 시 git 에 포트폴리오 소스코드를 공개하는 것 같아서 방법을 고민해 보았습니다.

1. private repository → public repository
가장 간편한 방법. 
→ 중요 소스코드들이 포함되어 있기 때문에 이 방법은 배제하였습니다.

2. git Submodule
git 레포지토리 하위에 다른 저장소를 관리하기 위한 도구 
상위 repository 는 슈퍼 프로젝트(superproject), 하위 repository 는 서브 모듈(submodule)
서브모듈을 사용하면 특정한 git 레포지토리를 다른 레포지토리의 하위 디렉토리로 사용할 수 있다.
→ 상위 repository public, 하위 repository private 으로 관리
여러명이 같이 사용하는 repository 라면 적용하기 괜찮아 보임
각각의 repository 가 따로 관리되기 때문에 서브 모듈(submodule) 쪽 소스가 수정되었을 경우 관리하기 까다로움
그러나 저는 개인 프로젝트를 혼자 개발하기 때문에 편하게 내가 수정한 소스 push 하고 싶어서 이 방법은 배제하였습니다.

3. 공개용 git 계정 생성 → repository import → 중요 소스코드 file 및 history 를 전부 삭제
기존 git 계정은 개발용도로 편하게 사용하고 공개용으로 계정을 새로 생성해서 기존 계정의 repository 를 import 하고 중요 소스코드 file 및 history 를 전부 삭제하는 방법
→ 저한테 가장 알맞은 방법이라고 생각해서 이 방법을 선택했습니다. 
공개용 계정에 import 한 시점 이후 변경된 소스는 반영이 되지 않는 단점이 있지만 저는 공개보다는 편하게 개발 관리하는게 우선이기 때문에 필요할 때 공개용 계정에 새로 import 한다는 생각으로 관리하기로 했습니다.

※ 3번 방법을 windows 환경, gitlab.com 기준으로 진행하였습니다.

- Python 설치 (이미 설치되어 있으면 Skip)
1. Python 최신 버전 다운로드 후 설치
https://www.python.org/downloads/

2. 환경변수 설정 후 콘솔에서 버전 확인
python --version 또는 python3 --version


- git-filter-repo 설치
1. GitHub에서 git-filter-repo 복제

git clone https://github.com/newren/git-filter-repo.git


2. git --exec-path 실행하여 Git 디렉터리 확인

git --exec-path


3. git-filter-repo 파일을 Git 디렉터리로 복사


4. git filter-repo 실행 -> No arguments specified. 문구 나오면 정상

git filter-repo


* 정상 문구 안나올 경우 -> git-filter-repo 열기 -> python3 를 python 으로 수정

수정 전
수정 후


- 공개용 계정으로 gitlab.com 로그인 -> Projects 메뉴 -> new project 버튼 클릭

- import project 클릭

- repository by URL 클릭

- import 할 git url, 계정, 비번 등 필요한 항목 입력 후 Create project 버튼 클릭

- cmd 실행 후 clone 할 경로 이동

- clone

git clone https://gitlab.com/jinmanp/manman_frontend.git

- filter-repo 로 repository file history 전부 삭제
1. 해당 repository 최상위 폴더로 이동

cd manman_frontend

2. 삭제 명령 실행

git filter-repo --force --invert-paths --path 삭제하고 싶은 폴더 및 파일
git filter-repo --force --invert-paths --path src/main/resources

3. repository 재연결
삭제 명령을 실행하면 repository 연결이 끊어진다. repository 다시 연결

git remote add [remote name] [git URL]
git remote add origin https://gitlab.com/jinmanp/manman_frontend.git

4. repository push

git push [remote name] --force --all
git push origin --force --all

5. 삭제 전 삭제 후 repository 비교

삭제 전
삭제 후

※ pre-receive hook declined 오류 발생 시
※ remote: You are not allowed to push code to this project. 오류 발생 시
Protected branches 설정 해제 또는 Allowed to force push 허용

 

반응형