보통, 프로젝트 형상 관리를 할 때, git을 이용하는 경우가 많을 것이다.
회사에서도 svn 또는 git을 사용하는 곳이 많을텐데..
git을 처음 사용하는 초심자들은 git status를 하는 순간 엄청난 untracked file들이 존재할 경우가 많을 것이다..
submodule 개수가 적다면, 그리 많지는 않겠지만..
이번 포스팅에서는 그러한 경우에 untracked file들을 한꺼번에 제거하는 방법을 정리하려고 한다.
보통 디렉토리 단위로 untracked file들이 존재할 것이므로, 일일히 디렉토리에 들어가서 제거한다는 건 여간 귀찮은 일이 아닐 수 없다.
아래 예제를 보자.
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 | bs@ubuntu:Cpp11$ git status 현재 브랜치 master 브랜치가 'origin/master'보다 2개 커밋만큼 앞에 있습니다. (로컬에 있는 커밋을 제출하려면 "git push"를 사용하십시오) 커밋하도록 정하지 않은 변경 사항: (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오) (작업 폴더의 변경 사항을 버리려면 "git checkout -- <파일>..."을 사용하십시오) 수정함: ../2017/06/17/a.out 수정함: a.out 추적하지 않는 파일: (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오) ../2017/05/23/a.out ../2017/05/23/test.cpp ../2017/05/23/test32 ../2017/05/23/test64 ../2017/06/15/a.out .test.cpp.swp test.cpp ../a.out ../hy ../hy2 ../hy3 ../io/ ../tqgi 커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를 사용하십시오) | cs |
이정도의 양은 사실 많은 편이 아니지만, 엄청 거대한 프로젝트일 경우에는 훨씬 많은 서브모듈이 존재하여..
평소에 관리하지 않는다면 추적하지 않는 파일의 양이 많아질 것이다.
그럼, git에서 제공하는 제거 방법을 확인해보자.
git에서 제공하는 자세한 정보는 아래 링크를 확인해보자.
https://git-scm.com/docs/git-clean
자세한 정보는 위에서 확인 하고, 일단 이 포스팅에서는 제거하는 방법을 설명하겠다.
untracked 파일을 모두 제거하려면..
git clean -f
untracked 파일 및 디렉토리까지 지우려면.. 위에서 -d 옵션을 추가로 주면 된다.
git clean -fd
그럼, 실제로 명령어를 이용하여 제거해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | bs@ubuntu:WorkSpace$ git clean -fd 2017/05/23/a.out 제거 2017/05/23/test.cpp 제거 2017/05/23/test32 제거 2017/05/23/test64 제거 2017/05/30/ 제거 2017/06/15/a.out 제거 20170521/ 제거 Clojure/ 제거 Crawling/source/ch10/examples/.ipynb_checkpoints/ 제거 Erlang/Day1/ 제거 a.out 제거 hy 제거 hy2 제거 hy3 제거 io/ 저장소 건너뜀 tqgi 제거 | cs |
위의 결과처럼, 모두 제거되는 것을 확인할 수 있다.
아주 깨끗해진 로컬을 볼 수 있을 것인데, 한 가지 문제라면 모두 제거하는 것이므로, 지우고 싶지 않은 파일도 제거할 가능성이 존재한다.
이때, 사용할 수 있는 옵션은 --dry-run이다. 이 옵션을 사용하면, 어떤 파일이 제거될 예정인 지 확인할 수 있다.
git clean -fd --dry-run
그럼, 사용 예를 보자.
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 | bs@ubuntu:WorkSpace$ git st 현재 브랜치 master 브랜치가 'origin/master'보다 2개 커밋만큼 앞에 있습니다. (로컬에 있는 커밋을 제출하려면 "git push"를 사용하십시오) 커밋하도록 정하지 않은 변경 사항: (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오) (작업 폴더의 변경 사항을 버리려면 "git checkout -- <파일>..."을 사용하십시오) 수정함: 2017/06/17/a.out 수정함: Cpp11/a.out 추적하지 않는 파일: (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오) a b c d e io/ 커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를 사용하십시오) bs@ubuntu:WorkSpace$ git clean -fd --dry-run a 제거할 예정 b 제거할 예정 c 제거할 예정 d 제거할 예정 e 제거할 예정 io/ 저장소 건너뛸 예정 | cs |
24줄 부터 30줄 까지 결과를 보면, 어떤 파일을 제거할 것인지 확인할 수 있다.
따라서, 이 옵션을 이용하여, 제거하지 않을 파일은 미리 stage 처리하면 실수로 제거될 일은 없지 않을까 생각한다.
서로 이웃 추가는 항상 환영입니다.:)
'프로그래밍 > etc. (Language)' 카테고리의 다른 글
[Node.js] 구글 트렌드에서 인기 급상승 검색어를 웹크롤링 해보자. (1) | 2019.05.23 |
---|---|
[Node.js] iconv-lite 이용하여 한글(여러 언어) utf-8 에서 hex, mbcs 로 변환하기 (4) | 2019.04.17 |
[JavaScript] 티스토리 블로그에 자바스크립트 함수 호출하기 (7) | 2018.09.04 |
[JavaScript] 자바스크립트로 URL 파라미터 값 가져오기 (3) | 2018.07.10 |
[GIT] git 로그 커밋 히스토리 tig으로 편하게 보자 (0) | 2018.06.21 |
댓글