Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

Git에서 추적되지 않는 파일 제거하기: git clean과 .gitignore 완벽 가이드

Git 저장소에는 추적(tracked) 파일추적되지 않는(untracked) 파일 두 가지 유형이 있습니다. 프로젝트를 진행하다 보면 저장소에서 추적되지 않는 파일을 제거해야 하는 상황이 종종 발생합니다. 이럴 때 git clean 명령어를 사용하면 됩니다. git clean -fd는 추적되지 않는 디렉터리와 파일을 제거하고, git clean -fx는 무시된(ignored) 파일과 무시되지 않은 파일을 모두 제거합니다.

추적되지 않는 파일을 제거해야 하는 경우

다음과 같은 상황에서 추적되지 않는 파일을 제거해야 할 수 있습니다:

  • 작업(로컬) 디렉터리가 불필요한 파일들로 어수선할 때
  • 의도하지 않은 폴더를 Git에 잘못 지정했을 때
  • 병합(merge) 작업의 잔여 파일이 남아 있거나 특정 파일을 정리하고 싶을 때

Git에서 추적되지 않는 파일을 처리하는 세 가지 방법

Git 브랜치에서 추적되지 않는 파일은 다음 방법으로 처리할 수 있습니다:

  • .gitignore 파일: 저장소 내 특정 파일과 디렉터리를 무시합니다
  • git clean -fx 명령어: 추적되지 않는 파일과 추적 중인 파일을 모두 제거합니다
  • git clean -fd 명령어: 추적되지 않는 파일과 디렉터리를 제거합니다

이 가이드에서는 Git으로 추적되지 않는 파일을 제거하는 방법을 실제 예제와 함께 자세히 살펴보겠습니다.

추적(Tracked) 파일과 추적되지 않는(Untracked) 파일의 차이

작업 디렉터리의 모든 파일은 추적되거나 추적되지 않는 상태입니다. 추적(tracked) 파일이란 이전 스냅샷에 추가되어 커밋된 파일로, Git이 변경 사항을 계속 감시하고 있는 파일을 의미합니다.

추적되지 않는(untracked) 파일은 그 반대입니다. 이전 커밋에 포함되지 않았고, 커밋을 위해 스테이징(staging)되지도 않은 파일입니다. 이런 파일은 스테이징 후 저장소에 커밋하거나, 아니면 삭제할 수 있습니다!

파일을 수정하거나 추가한 직후 git status를 실행하면 추적되지 않는 파일 목록과 추적 중인 파일 목록을 한눈에 확인할 수 있습니다.

방법 1: .gitignore로 파일 무시하기

첫 번째 방법은 해당 파일들을 무시(ignore)하는 것입니다. 예를 들어 C++ 프로젝트를 빌드할 때 원하지 않는 파일들이 자동으로 생성될 수 있습니다.

또 다른 예로 환경 변수, 데이터베이스 정보, API 키, 접근 키 등이 담긴 .env 파일이 있을 수 있습니다. 이런 민감한 정보가 저장소에 노출되기를 원하지 않겠죠? 바로 이럴 때 .gitignore 파일이 필요합니다.

.gitignore 파일에 등록된 파일들은 Git의 추적/비추적 흐름에서 완전히 제외됩니다. Git은 이러한 파일들을 무시하며, 추적하지도 않고 '추적되지 않는 파일'이라고 경고하지도 않습니다.

먼저 프로젝트 루트에 .gitignore 파일을 생성한 후, 숨기고 싶은 파일이나 폴더의 상대 경로를 지정합니다. 예를 들어 node_modules 폴더와 config.env 파일을 제외하고 싶다면 다음과 같이 추가하면 됩니다:

node_modules
config.env

프로젝트가 성장할수록 .gitignore를 올바르게 이해하고 관리하는 것이 필수적입니다. 어떤 폴더나 파일을 .gitignore에 추가해야 하는지 항상 인지해야 합니다. 그렇지 않으면 실수로 민감한 파일을 스테이징하게 되고, Git이 해당 파일을 추적하여 API 키 같은 중요한 정보가 저장소에 그대로 공개되는 심각한 보안 문제가 발생할 수 있습니다.

방법 2: git clean 명령어로 삭제하기

파일을 제거하는 또 다른 방법은 git clean 명령어를 사용하는 것입니다. git clean은 저장소에서 추적되지 않는 파일을 삭제합니다.

git clean 명령어는 작업 트리(working tree) 내 현재 작업 디렉터리에서 시작됩니다. 작업 트리란 현재 체크아웃된 브랜치를 의미합니다.

예를 들어 고등학교 사진 폴더를 실수로 저장소에 추가했을 때 이 명령어가 매우 유용합니다.

git clean은 여러 옵션을 받습니다. 명령어의 기본 문법을 살펴보겠습니다:

git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…

여기서 반드시 기억해야 할 점은 git clean이 파일을 시스템 수준에서 강제로 삭제한다는 것입니다. 즉, 한 번 삭제된 파일은 되돌릴 수 없습니다. 터미널의 rm 명령어와 비슷하게 동작합니다. 다만 파일이 이전 커밋에서 한 번이라도 추적되었다면 과거 버전을 복구할 가능성은 있습니다.

git clean -d -n: 드라이 런으로 미리 확인하기

경로를 지정하지 않고 실행하는 경우, Git이 추적되지 않는 디렉터리까지 함께 살펴보도록 -d 옵션을 포함하는 것이 좋습니다.

또한 실제 삭제 전에 -n 드라이 런(dry run) 옵션을 먼저 사용하는 것이 안전합니다. 이 옵션은 실제로 삭제하기 전에 어떤 파일이 제거될지 미리 보여줍니다. 즉, -n 플래그는 클린 작업의 시뮬레이션을 실행하는 것입니다. 결과를 확인한 후 확신이 서면 실제 git clean을 실행하면 됩니다.

이 옵션은 아직 삭제할 준비가 되지 않았거나 삭제하고 싶지 않은 파일을 실수로 제거하는 것을 막아주는 안전장치 역할을 합니다.

실제 예제를 살펴보겠습니다. 추적하고 싶지 않아 제거하려는 sillyPicture.jpg 파일이 있다고 가정해 봅시다. 먼저 어떤 일이 일어날지 확인해 보세요:

Git에서 추적되지 않는 파일 제거하기: git clean과 .gitignore 완벽 가이드

git clean -f: 강제로 삭제하기

git clean이 실제로 작동하려면 -f(force) 옵션을 지정해야 합니다. 이 옵션은 선택한 파일을 저장소에서 정말로 제거할 확신이 있을 때만 사용해야 합니다.

git clean -f로 sillyPicture.jpg를 제거하거나, 더 구체적으로 git clean -f sillyPicture.jpg처럼 특정 파일만 지정하여 제거할 수도 있습니다.

Git에서 추적되지 않는 파일 제거하기: git clean과 .gitignore 완벽 가이드

위 예제에서 git status가 먼저 추적되지 않는 파일의 존재를 알려주고, -f 옵션으로 삭제한 후 해당 파일이 사라진 것을 확인할 수 있습니다.

-f 옵션과 git clean은 매우 강력하지만, 무시된(ignored) 파일에는 작동하지 않습니다. 이는 git clean이 Git이 인식하고 버전 관리 시스템에 포함된 파일에만 적용되기 때문입니다.

git clean -x: 무시된 파일까지 삭제하기

이 옵션은 정말 자신이 있을 때만 사용하는 것을 권장합니다. -x 옵션을 사용하면 무시된 파일과 디렉터리까지 모두 제거할 수 있습니다. git clean -d -x -f 명령어 하나로 눈 깜짝할 새에 모든 것이 삭제됩니다. 하지만 그만큼 위험하니 신중하게 사용하세요.

git clean -d -i: 대화형 모드로 안전하게 삭제하기

초보자에게 가장 권장되는 방법입니다. Git을 배우는 초기 단계에서는 전달하는 옵션 하나하나에 주의해야 합니다. 앞서 소개한 드라이 런(-n) 옵션 외에도, 대화형 인터페이스를 제공하는 -i 옵션이 있습니다. 이 인터페이스를 통해 각 파일을 개별적으로 검토하고 선택적으로 제거할 수 있습니다!

Git에서 추적되지 않는 파일 제거하기: git clean과 .gitignore 완벽 가이드

결론

저장소에서 추적되지 않는 파일은 .gitignore 파일 또는 git clean 명령어를 사용하여 제거할 수 있습니다. git clean은 현재 작업 디렉터리에서 시작해 재귀적으로 파일을 제거합니다.

git clean을 처음 사용한다면 반드시 -n 옵션으로 드라이 런을 먼저 실행하여 삭제될 파일 목록을 확인한 후 진행하는 것이 안전합니다. git clean으로 삭제된 파일은 복구가 불가능하므로, 실수로 중요한 파일을 영구적으로 잃지 않도록 항상 주의하세요.