일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 홈택스
- 체당금
- Python
- Eclipse
- blockchain
- Sentinel
- Java
- 인민공원
- 이더리움
- php
- 소액임금체불
- javascript
- cartalyst
- vue
- 보정명령
- as후기
- auth
- 개인사업자
- Tutorial
- Bootstrap
- 코로나19
- 사업자계좌
- elasticSearch
- win32
- Laravel
- reactnative
- Blade
- 당사자표시정정신청서
- 코로나
- 전자소송
- Today
- Total
그냥 사는 이야기
git history에서 파일 영구적으로 지우기 본문
git
은 파일의 이력을 관리하며 증감분을 기록하면서 관리합니다. 따라서 파일을 커밋한 이후 나중에 이것을 지우는 delete를 수행한다 해도 이 자체가 하나의 이력이므로 소스 이력상에서 파일이 지울 수는 없습니다.
라고 알고 있었는데, 다른 사람의 팀 소스에서 지워야할 필요가 생겼습니다. 초기에. gitignore에 포함 못 시킨 고용량의 디렉터리로 인해, 이후 지속적으로 용량의 고통을 받아오다 결국 프로젝트를 삭제하고 다시 생성할까 했었습니다.
하지만 삭제 후 다시 생성하면 그 동안의 commit history가 사라지기에 망설이고 있었습니다.
모든 이력에서 특정 파일 혹은 디렉토리 삭제
filter-branch
filter-branch
는 브랜치내에서 특정 이력을 다시 쓰는 history rewrite 가 가능한 옵션입니다. 그래서 파일 제거나 rewrite 같은 것을 할 수 있습니다. 하지만 이런 것들은 조심해서 사용되어야 합니다. 위의 경우처럼 초기 커밋에서 포함된 파일들을 지울 때 사용하면 될 것 같습니다.
그런데 검색해보니 사용하는 방법이 제각각이었습니다. 그중에서 직접 사용해보고 확인한 것은 Git가지고 놀기(3) - 파일 영원히 지우기의 방법으로 하였을 때가 저의 경우에는 효과가 있었습니다.
$ git filter-branch --tree-filter 'rm -rf ./node_modules' HEAD
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
Proceeding with filter-branch...
Rewrite dc1f1ce75d65ddca1a00dfc7936a9c6c6f8635ba (1/30) (0 seconds passed, remaiRewrite
b84f79c97d4cfe5eaea489780905004fb975e570 (2/30) (101 seconds passed, remRewrite
36b524992fe444bcb9ae4e4371863cebbf00cea1 (3/30) (202 seconds passed, remRewrite
702be0956a8272dace9375b87c6fbe282c215dec (4/30) (302 seconds passed, remRewrite
eb92a21aaae71c085625215208b10ab64da3a6eb (5/30) (303 seconds passed, remRewrite
e24bb84769fa4e1ee35fe1136100a7f25fc7bd75 (6/30) (303 seconds passed, remRewrite
eb01c02df740889faaa8dd93ae43211c0c75082b (7/30) (304 seconds passed, remRewrite
ccbceef34a24022d1d984b1c4551685d1bb90598 (8/30) (305 seconds passed, remRewrite
53ebb33ed4ff2d5d38b2f017777d6b663fa5949b (9/30) (305 seconds passed, remRewrite
48b0a8c08435df990201045c73143fc582edd6c6 (10/30) (306 seconds passed, reRewrite
7569ca66c979f65b30645889f8629db0cca4a132 (11/30) (307 seconds passed, reRewrite
2d9d01cced5bac42d89dd38a9d495eddea40dfe5 (12/30) (307 seconds passed, reRewrite
44ed319c656a7dedffe17093fdd3af2213770896 (13/30) (308 seconds passed, reRewrite
34e23214bd16229451b17bb5dd543fc57a7b57fa (14/30) (309 seconds passed, reRewrite
c0a8cb173eaee7b568e994165996fee637f500b5 (15/30) (309 seconds passed, reRewrite
31d0a691867aca4ce1abce41b5a14f31c0486c7c (16/30) (310 seconds passed, reRewrite
27eb484ade2efb8685e953fc467cf65905998739 (17/30) (311 seconds passed, reRewrite
4ea7a431b4aa1cb05ac88f622f3d73b8f5b8f0c2 (18/30) (311 seconds passed, reRewrite
ff791ac6fa92ed42f6bb9d83857354d7c180c115 (19/30) (312 seconds passed, reRewrite
1e3678175318dec256895fd837e63fc3f672c153 (20/30) (312 seconds passed, reRewrite
7d26651ba9c832e61d937ff292aab85c713eabcb (21/30) (313 seconds passed, reRewrite
dc8391645f3f1929846c833a6d6b2be1e4e723d9 (22/30) (314 seconds passed, reRewrite
507a61a33a4d1a9420d0131bc0d45ac02ebe64c9 (23/30) (316 seconds passed, reRewrite
d8585851b034af7f39bc2f1791a568d38e0f868d (24/30) (318 seconds passed, reRewrite
09cfdece594fbd29ceaed00e21abc28c44ca9b01 (25/30) (319 seconds passed, reRewrite
f9a6fad83a5fd00b0c74e5f9f1481ddd528d0e6b (26/30) (319 seconds passed, reRewrite
7c697b2618f8c27b4f5a5f3dc3ec6889b1edb17c (27/30) (320 seconds passed, reRewrite
70b4c133f202922581fa72639f3b3a78d7708297 (28/30) (321 seconds passed, reRewrite
80d4c415680bf3428a4cb98892bef237edea1006 (29/30) (321 seconds passed, reRewrite
35d1ea7be6d7807b9994c8971ef03bf433bf3187 (30/30) (322 seconds passed, remaining 0 predicted)
Ref 'refs/heads/master' was rewritten
이후 push 만 해주면 끝!
master branch unprotected
$ git push origin master --force
Enumerating objects: 663, done.
Counting objects: 100% (663/663), done.
Delta compression using up to 12 threads
Compressing objects: 100% (416/416), done.
Writing objects: 100% (663/663), 317.17 MiB | 5.70 MiB/s, done.
Total 663 (delta 194), reused 628 (delta 192)
remote: Resolving deltas: 100% (194/194), done.
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To https://다른 팀의 어떤 프로젝트 경로.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://다른 팀의 어떤 프로젝트 경로.git'
이것을 처음 올렸을 때는 위와 같은 에러가 발생하였는데 이것은 gitlab 내 master 브랜치 설정을 변경하면 해결이 가능합니다.
[Settings] - [Repository] - [Protected Branches] 에서 master 부분에 UnProtected를 눌러주면 됩니다.
이후 다시 해보면 성공적으로 지워진 것을 확인 할 수 있습니다.
'Development > 기타' 카테고리의 다른 글
자신만의 ERC20 Token 만들기 (1) | 2020.12.07 |
---|---|
git push에서 Permission denied 해결 (0) | 2020.11.27 |
wsl2 에서 ohmyzsh 설치 및 사용하기 (0) | 2020.06.17 |
git lfs(large file storage)를 사용하여 대용량 파일 관리하기 (0) | 2020.06.08 |
Hyperledger Fabric 거래처리 방식 (2) | 2020.05.08 |