소개
이 랩에서는 Git 이 디렉토리를 추적하고 있는지 확인하는 방법을 배우겠습니다. git ls-tree 명령을 사용하여 특정 커밋의 파일과 디렉토리를 검사하여 Git 저장소의 내용을 탐색합니다.
또한, git status 명령을 사용하여 저장소 내 파일의 현재 추적 상태를 확인하고 Git 이 빈 디렉토리를 어떻게 처리하는지 이해할 것입니다.
이 랩에서는 Git 이 디렉토리를 추적하고 있는지 확인하는 방법을 배우겠습니다. git ls-tree 명령을 사용하여 특정 커밋의 파일과 디렉토리를 검사하여 Git 저장소의 내용을 탐색합니다.
또한, git status 명령을 사용하여 저장소 내 파일의 현재 추적 상태를 확인하고 Git 이 빈 디렉토리를 어떻게 처리하는지 이해할 것입니다.
이 단계에서는 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 저장소에 커밋했습니다. 이제 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 이 빈 디렉토리를 직접 추적하지 않고, 그 안에 있는 파일을 추적한다는 것을 발견했습니다.