Git 에서 디렉토리가 추적되는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 Git 이 디렉토리를 추적하고 있는지 확인하는 방법을 배우겠습니다. git ls-tree 명령을 사용하여 특정 커밋의 파일과 디렉토리를 검사하여 Git 저장소의 내용을 탐색합니다.

또한, git status 명령을 사용하여 저장소 내 파일의 현재 추적 상태를 확인하고 Git 이 빈 디렉토리를 어떻게 처리하는지 이해할 것입니다.

디렉토리에 대해 git ls-tree 실행

이 단계에서는 git ls-tree 명령을 사용하여 Git 저장소의 내용을 탐색합니다. 이 명령을 사용하면 특정 커밋 시점의 디렉토리 상태를 나타내는 트리 객체의 내용을 볼 수 있습니다.

먼저, my-time-machine 디렉토리에 있는지 확인하십시오:

cd ~/project/my-time-machine

이제 git ls-tree를 사용하여 최신 커밋의 내용을 살펴보겠습니다. 최신 커밋을 참조하기 위해 HEAD를 사용합니다:

git ls-tree HEAD

다음과 유사한 출력을 볼 수 있습니다:

100644 blob a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 message.txt

이 출력을 자세히 살펴보겠습니다:

  • 100644: 파일 모드 (file mode) 로, 일반 파일임을 나타냅니다.
  • blob: 객체 유형을 나타냅니다. blob 객체는 파일의 내용을 저장합니다.
  • a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9: message.txt의 내용을 저장하는 blob 객체의 고유 식별자 (SHA-1 해시) 입니다. 해시는 다를 것입니다.
  • message.txt: 파일 이름입니다.

git ls-tree 명령은 전체 커밋을 체크아웃하지 않고 특정 커밋의 내용을 검사하는 데 유용합니다. 해당 시점에 Git 이 추적한 파일과 디렉토리를 보여줍니다.

특정 타임 캡슐 (커밋) 내부를 들여다보며 정확히 어떤 파일이 포함되었고, 고유한 지문 (blob 해시) 이 무엇인지 확인하는 것과 같습니다. 이는 프로젝트의 히스토리 구조와 내용을 이해하는 강력한 방법입니다.

git status 를 사용하여 추적 확인

이전 단계에서 파일을 생성하고 Git 저장소에 커밋했습니다. 이제 git status 명령을 다시 사용하여 저장소의 현재 상태를 확인하고 파일이 추적되고 있는지 확인해 보겠습니다.

여전히 ~/project/my-time-machine 디렉토리에 있는지 확인하십시오:

cd ~/project/my-time-machine

이제 git status 명령을 실행합니다:

git status

다음과 유사한 출력을 볼 수 있습니다:

On branch master
nothing to commit, working tree clean

이 출력은 몇 가지 중요한 정보를 알려줍니다:

  • On branch master: 현재 프로젝트의 주요 타임라인인 master 브랜치에 있습니다.
  • nothing to commit, working tree clean: 이것이 핵심 부분입니다. 아직 커밋되지 않은 작업 디렉토리의 변경 사항이 없음을 의미합니다. Git 은 추적해야 하는 모든 파일을 추적하고 있으며, 추가하거나 커밋해야 하는 새 파일이나 수정된 파일이 없습니다.

이는 변경 사항을 완료하고 커밋했을 때 원하는 상태입니다. Git 이 프로젝트의 현재 상태를 인식하고 있으며 저장소의 모든 것이 최신 상태임을 확인합니다.

이 출력을 message.txt를 생성하고 커밋하기 전에 보았던 git status 출력과 비교하면 빈 저장소, 추적되지 않은 파일이 있는 저장소, 그리고 추적된 파일이 있는 깨끗한 저장소 간의 차이점을 강조합니다.

git status를 이해하는 것은 저장소에서 무슨 일이 일어나고 있는지, 그리고 어떤 조치를 취해야 하는지 (예: 파일 추가 또는 커밋) 알기 위한 주요 도구이므로 매우 중요합니다.

빈 디렉토리 테스트

이 단계에서는 Git 이 빈 디렉토리를 어떻게 처리하는지 살펴보겠습니다. 이는 초보자에게 흔히 혼란을 주는 부분인데, Git 이 파일과 비교하여 디렉토리를 다르게 처리하기 때문입니다.

먼저, ~/project/my-time-machine 디렉토리에 있는지 확인하십시오:

cd ~/project/my-time-machine

이제 프로젝트 내에 새롭고 빈 디렉토리를 생성해 보겠습니다:

mkdir empty-folder

디렉토리를 생성했습니다. 이제 git status를 사용하여 저장소의 상태를 확인해 보겠습니다:

git status

다음과 유사한 출력을 볼 수 있습니다:

On branch master
nothing to commit, working tree clean

Git 이 empty-folder를 추적되지 않은 디렉토리로 보고하지 않는다는 점에 유의하십시오. 이는 Git 이 디렉토리 자체가 아닌 파일 내용을 추적하기 때문입니다. 빈 디렉토리에는 추적할 내용이 없습니다.

이것은 Git 에서 중요한 개념입니다. 저장소에 빈 디렉토리를 포함해야 하는 경우, 일반적인 해결 방법은 더미 파일을 안에 배치하는 것입니다. 일반적인 관행은 .gitkeep라는 파일을 생성하는 것입니다 (이름은 중요하지 않으며, 단지 관례일 뿐입니다).

empty-folder 내에 .gitkeep 파일을 생성해 보겠습니다:

touch empty-folder/.gitkeep

이제 git status를 다시 확인해 보겠습니다:

git status

이번에는 다음을 볼 수 있습니다:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
 untracked files present (use "git add" to track)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
 empty-folder/

이제 Git 은 추적할 수 있는 파일 (.gitkeep) 을 포함하고 있기 때문에 empty-folder/를 인식합니다.

이는 Git 이 디렉토리 자체가 아닌 디렉토리 내의 파일 존재를 추적한다는 것을 보여줍니다. 저장소의 히스토리에 디렉토리를 포함하려면, 최소한 하나의 추적된 파일을 포함해야 합니다.

요약

이 랩에서는 디렉토리와 해당 내용이 Git 에 의해 추적되는지 확인하는 방법을 배웠습니다. git ls-tree HEAD 명령을 사용하여 최신 커밋의 내용을 검사하여 추적된 파일과 관련 블롭 (blob) 객체 및 해시를 표시한다는 것을 이해했습니다. 이 명령은 특정 커밋 시점의 저장소 상태 스냅샷을 제공합니다.

또한 git status 명령을 사용하여 저장소 내 파일의 현재 추적 상태를 확인하여 커밋된 파일이 실제로 Git 에 의해 추적되는지 확인했습니다. 마지막으로, Git 이 빈 디렉토리를 어떻게 처리하는지 탐구하여 Git 이 빈 디렉토리를 직접 추적하지 않고, 그 안에 있는 파일을 추적한다는 것을 발견했습니다.