본문 바로가기
프로그래밍/etc. (Language)

[GIT] git 추적하지 않는 파일 (untracked files) 제거 하는 방법

by _BlankSpace 2019. 1. 20.

보통, 프로젝트 형상 관리를 할 때, 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 처리하면 실수로 제거될 일은 없지 않을까 생각한다.


서로 이웃 추가는 항상 환영입니다.:)

댓글