Close

Git Clean

이 섹션에서는 git clean 명령에 대해 자세히 설명하겠습니다. Git clean은 '실행 취소' 명령과 비슷합니다. Git cleangit resetgit checkout과 같은 기타 명령을 보완하는 것으로 간주될 수 있습니다. 이러한 기타 명령은 이전에 Git 추적 색인에 추가된 파일에서 작동하는 반면, git clean 명령은 추적되지 않은 파일에서 작동합니다. 추적되지 않은 파일은 리포지토리의 작업 디렉터리에서 만들어졌지만 아직 git add 명령을 사용하여 리포지토리의 추적 색인에 추가되지는 않은 파일입니다.


추적 파일과 추적되지 않는 파일의 차이점을 더 잘 이해하려면 다음 명령줄 예시를 살펴보세요

$ mkdir git_clean_test
$ cd git_clean_test/
$ git init .
Initialized empty Git repository in /Users/kev/code/git_clean_test/.git/
$ echo "tracked" > ./tracked_file
$ git add ./tracked_file
$ echo "untracked" > ./untracked_file
$ mkdir ./untracked_dir && touch ./untracked_dir/file
$ git status
On branch master

Initial commit

Changes to be committed: (use "git rm --cached <file>..." to unstage)

new file: tracked_file

Untracked files: (use "git add <file>..." to include in what will be committed) untracked_dir/ untracked_file
Git 로고
관련 자료

Git 치트 시트

Bitbucket 로고
솔루션 보기

Bitbucket Cloud에서 Git에 대해 알아보기

예시에서는 git_clean_test 디렉터리에 새 Git 리포지토리를 만듭니다. 그런 다음 Git 색인에 추가되는 tracked_file이 만들어지고, 추가로 untracked_fileuntracked_dir이 만들어집니다. 그 후 예시에서는 git status를 호출하여 추적된 변경 사항과 추적되지 않은 변경 사항의 Git 내부 상태를 나타내는 출력을 표시합니다. 이 상태의 리포지토리 사용하면 git clean 명령을 실행하여 의도된 목적을 보여줄 수 있습니다.

$ git clean fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

이때 기본 git clean 명령을 실행하면 치명적인 오류가 발생할 수 있습니다. 위 예시는 오류가 어떤 모습인지 보여줍니다. 기본적으로 Git은 git clean을 시작하려면 "강제" 옵션을 전달하도록 전역적으로 구성되어 있습니다. 이것은 중요한 안전 메커니즘입니다. 마침내 git clean을 실행했을 때는 실행 취소할 수 없습니다. 완전히 실행되면 git clean은 명령줄 rm 유틸리티를 실행하는 것과 비슷하게 하드 파일 시스템을 삭제합니다. 실행하기 전에 추적되지 않은 파일을 삭제할 것인지 확인하세요.

일반적인 옵션 및 사용법


기본 git clean 동작과 주의 사항에 대한 이전 설명을 감안할 때 다음 내용은 다양한 git clean 사용 사례와 해당 작업에 필요한 명령줄 옵션을 보여줍니다.

-n

-n 옵션은 git clean의 “시험 실행”을 수행합니다. 파일을 실제로 제거하지 않고 어떤 파일이 제거되는지 보여줍니다. 항상 먼저 git clean의 시험 실행을 수행하는 것이 모범 사례입니다. 앞서 만든 데모 리포지토리에서 이 옵션을 설명할 수 있습니다.

$ git clean -n
Would remove untracked_file

출력에서는 git clean 명령을 실행하면 untracked_file이 제거된다는 것을 알려줍니다. 참고로 untracked_dir은 여기 출력에서 보고되지 않습니다. 기본적으로 git clean은 디렉터리에서 재귀적으로 작동하지 않습니다. 실수로 영구적으로 삭제하는 것을 방지하는 또다른 안전 메커니즘입니다.

-f or --force

강제 옵션은 현재 디렉터리에서 추적되지 않은 파일을 실제로 삭제하기 시작합니다. clean.requireForce 구성 옵션이 false로 설정되지 않은 이상 강제 실행이 필요합니다. 이렇게 해도 추적되지 않은 폴더나 .gitignore에서 지정한 파일은 제거되지 않습니다. 이제 예시 리포지토리에서 라이브 git clean을 실행해 보겠습니다.

$ git clean -f 
Removing untracked_file

이 명령은 제거된 파일을 출력합니다. 여기서 untracked_file이 제거된 것을 확인할 수 있습니다. 이때 git status 명령을 실행하거나 ls 명령을 실행하면 untracked_file이 삭제되었으며 어디에도 없는 것으로 표시됩니다. 기본적으로 git clean -f는 현재 디렉터리의 추적되지 않은 모든 파일에서 작동합니다. 또한 특정 파일을 제거하는 -f 옵션과 함께 < path > 값을 전달할 수 있습니다.

git clean -f <path>
-d include directories

-d 옵션은 git clean에 추적되지 않은 디렉터리도 제거하도록 지시하며 기본적으로 디렉터리는 무시합니다. 이전 예시에 -d 옵션을 추가할 수 있습니다.

$ git clean -dn
Would remove untracked_dir/
$ git clean -df
Removing untracked_dir/

여기서 untracked_dir이 제거되도록 출력하는 -dn 조합을 사용하여 '시험 실행'을 수행했습니다. 그런 다음 강제 정리를 실행하고 untracked_dir이 제거되었다는 출력을 받습니다.

-x force removal of ignored files

일반적인 소프트웨어 릴리스 패턴은 빌드 또는 배포 디렉터리가 리포지토리 추적 색인에 커밋되지 않도록 하는 것입니다. 빌드 디렉터리에는 커밋된 소스 코드에서 만들어진 임시 빌드 아티팩트가 포함됩니다. 이 빌드 디렉터리는 보통 리포지토리 .gitignore 파일에 추가됩니다. 추적되지 않은 다른 파일로 이 디렉터리를 정리하는 것도 편리할 수 있습니다. -x 옵션은 무시된 파일도 포함하도록 git clean에 지시합니다. 이전의 git clean 호출과 마찬가지로 최종 삭제 전에 '시험 실행'을 먼저 수행하는 것이 가장 좋습니다. -x 옵션은 프로젝트 빌드별 파일뿐만 아니라 무시된 모든 파일에도 적용됩니다. ./.idea IDE 구성 파일과 같이 의도하지 않은 것일 수 있습니다.

git clean -xf

-d 옵션과 마찬가지로 -x는 다른 옵션과 함께 전달하고 구성할 수 있습니다. 이 예시에서는 현재 디렉터리에서 추적되지 않은 파일뿐만 아니라 Git이 보통 무시하는 모든 파일을 제거하는 -f와의 조합을 보여줍니다.

대화형 모드 또는 git clean interactive


지금까지 살펴본 임시 명령줄 실행 외에도 git clean에는 -i 옵션을 전달하여 시작할 수 있는 "대화형" 모드가 있습니다. 이 문서의 도입부에 있던 예시 리포지토리를 다시 살펴보겠습니다. 초기 상태에서 대화형 정리 세션을 시작해볼 것입니다.

$ git clean -di
Would remove the following items:
  untracked_dir/  untracked_file
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers    4: ask each             5: quit                 6: help
What now>

-d 옵션으로 대화형 세션을 시작했으므로 untracked_dir에도 적용됩니다. 대화형 모드에서는 추적되지 않은 파일에 적용할 명령을 요청하는 What now> 메시지가 표시됩니다. 명령 자체는 매우 간단합니다. 6: help 명령부터 임의의 순서대로 각각 간략하게 살펴보겠습니다. 명령 6을 선택하면 다른 명령에 대해 더 자세히 설명합니다.

What now> 6
clean               - start cleaning
filter by pattern   - exclude items from deletion
select by numbers   - select items to be deleted by numbers
ask each            - confirm each deletion (like "rm -i")
quit                - stop cleaning
help                - this screen
?                   - help for prompt selection
5: quit

직관적이며 대화형 세션을 종료합니다.

1: clean

표시된 항목을 삭제합니다. 1: clean을 실행하면 untracked_dir/ untracked_file이 제거됩니다

4: ask each

추적되지 않은 각 파일을 반복하고 삭제를 위해 Y/N 메시지를 표시합니다. 다음과 비슷하게 표시됩니다.

*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers    4: ask each             5: quit                 6: help
What now> 4
Remove untracked_dir/ [y/N]? N
Remove untracked_file [y/N]? N
2: filter by pattern

추적되지 않은 파일 목록을 필터링하는 데 사용되는 입력을 받는 추가 메시지를 표시합니다.

Would remove the following items:
  untracked_dir/  untracked_file
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers    4: ask each             5: quit                 6: help
What now> 2
  untracked_dir/  untracked_file
Input ignore patterns>> *_file
  untracked_dir/

여기에 *_file 와일드카드 패턴을 입력하며 이는 추적되지 않는 파일 목록을 untracked_dir로 제한합니다.

3: select by numbers

명령 2와 비슷하게 명령 3은 추적되지 않은 파일 이름 목록을 세분화합니다. 대화형 세션에서 추적되지 않은 파일 이름에 해당하는 번호를 입력하라는 메시지가 표시됩니다.

Would remove the following items:
  untracked_dir/  untracked_file
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers    4: ask each             5: quit                 6: help
What now> 3
    1: untracked_dir/    2: untracked_file
Select items to delete>> 2
    1: untracked_dir/  * 2: untracked_file
Select items to delete>>
Would remove the following item:
  untracked_file
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers    4: ask each             5: quit                 6: help

요약


요약하자면 git clean은 리포지토리의 작업 디렉터리에서 추적되지 않은 파일을 삭제하는 편리한 방법입니다. 추적되지 않은 파일은 리포지토리의 디렉터리에 있지만 아직 git add로 리포지토리 색인에 추가되지는 않은 파일입니다. 전반적으로 git clean의 효과는 git status와 운영 체제의 기본 삭제 도구를 사용하여 얻을 수 있습니다. Git cleangit reset과 함께 사용하면 리포지토리 추가 및 커밋을 완전히 실행 취소할 수 있습니다.


이 문서 공유
다음 토픽

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

도구로 가득한 벽을 사용하여 협업하는 사람들

Bitbucket 블로그

DevOps 일러스트레이션

DevOps 학습 경로

Atlassian 전문가와 함께 하는 Demo Den 기능 데모

Bitbucket Cloud가 Atlassian Open DevOps와 작동하는 방법

DevOps 뉴스레터 신청

Thank you for signing up