Skip to content

Instantly share code, notes, and snippets.

@ChangJoo-Park
Created January 24, 2018 04:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ChangJoo-Park/eeaad35abe78a6dc81863d0e402c8d60 to your computer and use it in GitHub Desktop.
Save ChangJoo-Park/eeaad35abe78a6dc81863d0e402c8d60 to your computer and use it in GitHub Desktop.
git-filter-branch, bfg
# git filter-branch 사용법
외부 라이브러리 또는 플러그인을 사용하는 경우(이후 의존성이라 지칭) 바이너리 혹은 소스코드를 프로젝트 디렉터리 안에서 관리하게 됩니다. git을 사용하는 경우 내려받은 외부 의존성들의 바이너리, 소스코드는 `.gitignore` 파일에 추가해서 git 이 추적하지 않도록 해야합니다.
실수 혹은 의도치 않게 git으로 관리하는 파일이 된 경우 파일을 삭제하더라도 히스토리에 남게 됩니다. 만약 용량이 큰 바이너리 파일이 히스토리에 추가된 경우 소스코드 저장소에 따라 `push` 를 할 수 없는 경우가 생깁니다.
**filter-branch** 기능을 사용하면 커밋에서 특정 파일을 지울 수 있습니다. 모든 커밋을 추적하여 사용자가 지정한 작업을 할 수 있습니다.
git으로 관리하고 있는 프로젝트에서 아래 명령어로 작업합니다.
```bash
$ git filter-branch --tree-filter 'rm -rf _삭제할 파일 또는 디렉터리_' HEAD
```
`$` 는 터미널 표시입니다.
여기서는 HEAD를 타겟으로 하여 모든 커밋에서 _삭제할 파일 또는 디렉터리_를 찾아 지웁니다. 작업이 완료되면 모든 히스토리에서 제거됩니다.
모든 브랜치까지 포함하여 정리하려면 `--all` 옵션을 이용해 동일한 작업을 할 수 있습니다.
특정 커밋 구간을 지정하려면 HEAD 대신 `시작해시..마지막해시` 으로 변경할 수 있습니다.
예 : `18ca709..c673b40`
`18ca709..HEAD` 면 `18ca709` 부터 가장 최근 커밋까지 동일한 작업을 합니다.
---
filter-branch는 속도가 매우 느립니다. 대안으로 [BFG Repo-Cleaner](https://rtyley.github.io/bfg-repo-cleaner/)가 있습니다.
filter-branch와 동일한 기능을 하지만 여러 옵션들을 제공해 다양하게 사용할 수 있을 것으로 보입니다.
@ChangJoo-Park
Copy link
Author

git filter-branch 사용법

외부 라이브러리 또는 플러그인을 사용하는 경우(이후 의존성이라 지칭) 바이너리 혹은 소스코드를 프로젝트 디렉터리 안에서 관리하게 됩니다. git을 사용하는 경우 내려받은 외부 의존성들의 바이너리, 소스코드는 .gitignore 파일에 추가해서 git 이 추적하지 않도록 해야합니다.

실수 혹은 의도치 않게 git으로 관리하는 파일이 된 경우 파일을 삭제하더라도 히스토리에 남게 됩니다. 만약 용량이 큰 바이너리 파일이 히스토리에 추가된 경우 소스코드 저장소에 따라 push 를 할 수 없는 경우가 생깁니다.

filter-branch 기능을 사용하면 커밋에서 특정 파일을 지울 수 있습니다. 모든 커밋을 추적하여 사용자가 지정한 작업을 할 수 있습니다.

git으로 관리하고 있는 프로젝트에서 아래 명령어로 작업합니다.

$ git filter-branch --tree-filter 'rm -rf _삭제할 파일 또는 디렉터리_' HEAD

$ 는 터미널 표시입니다.

여기서는 HEAD를 타겟으로 하여 모든 커밋에서 _삭제할 파일 또는 디렉터리_를 찾아 지웁니다. 작업이 완료되면 모든 히스토리에서 제거됩니다.

모든 브랜치까지 포함하여 정리하려면 --all 옵션을 이용해 동일한 작업을 할 수 있습니다.

특정 커밋 구간을 지정하려면 HEAD 대신 시작해시..마지막해시 으로 변경할 수 있습니다.

예 : 18ca709..c673b40

18ca709..HEAD18ca709 부터 가장 최근 커밋까지 동일한 작업을 합니다.


filter-branch는 속도가 매우 느립니다. 대안으로 BFG Repo-Cleaner가 있습니다.

filter-branch와 동일한 기능을 하지만 여러 옵션들을 제공해 다양하게 사용할 수 있을 것으로 보입니다.

참고 : https://git-scm.com/book/ko/v1/Git-%EB%8F%84%EA%B5%AC-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EB%8B%A8%EC%9E%A5%ED%95%98%EA%B8%B0#filter-branch%EB%8A%94-%ED%8F%AC%ED%81%AC%EB%A0%88%EC%9D%B8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment