파일 관리와 스테이징 영역 활용하기

GitBeginner
지금 연습하기

소개

시간 여행자를 꿈꾸는 여러분, 다시 만나서 반갑습니다! 이제 Git 실력을 한 단계 높여 스테이징 영역이라는 매력적인 세계를 탐험해 볼 시간입니다.

이번 실습에서는 Git 의 파일 관리 기능을 더 깊이 있게 다룹니다. 프로젝트에서 파일을 추가하거나 제거하는 방법, 추적하고 싶지 않은 파일을 무시하는 방법, 커밋하기 전에 변경 사항을 검토하는 방법, 그리고 실수했을 때 변경 사항을 되돌리는 방법까지 배우게 됩니다. 이러한 기술은 마치 시간 여행 장치를 업그레이드하는 것과 같습니다. 프로젝트의 타임라인을 탐색할 때 훨씬 더 정교한 제어력과 유연성을 갖게 될 것입니다.

실습을 마칠 때쯤이면 Git 의 스테이징 영역이 어떻게 더 체계적이고 의미 있는 커밋을 만드는 데 도움을 주는지 깊이 이해하게 될 것입니다. 자, 터미널을 켜고 이 흥미진진한 여정을 시작해 봅시다!

이 과정은 학습과 실습을 돕기 위해 단계별 지침을 제공하는 가이드형 실습입니다. 각 단계를 주의 깊게 따라가며 직접 경험을 쌓아보세요. 통계에 따르면 이 과정은 초급 수준이며, 97%의 높은 수료율을 기록하고 있습니다. 또한 학습자들로부터 100%의 긍정적인 평가를 받았습니다.

작업 공간 설정하기

먼저 이번 실습을 위한 새로운 디렉토리를 만드는 것부터 시작해 보겠습니다. 터미널을 열고 다음 명령어들을 입력하세요.

cd ~/project
mkdir git-staging-lab
cd git-staging-lab
git init

이 명령어들은 git-staging-lab이라는 새 디렉토리를 만들고, 해당 위치로 이동한 뒤, 새로운 Git 저장소를 초기화합니다.

이제 작업에 사용할 간단한 Python 스크립트를 하나 만들어 보겠습니다.

echo "print('Hello, Git!')" > hello.py

이 명령어는 간단한 출력문이 포함된 hello.py라는 파일을 생성합니다.

스테이징 영역에 파일 추가하기

hello.py 파일이 준비되었으니, 이제 이 파일을 스테이징 영역에 추가해 보겠습니다. 스테이징 영역은 다음 커밋에 포함하고 싶은 모든 변경 사항을 모아두는 준비 구역과 같습니다.

다음 명령어를 실행하세요.

git add hello.py

이 명령어는 Git 에게 hello.py 파일을 추적하기 시작하고, 다음 커밋에 이 파일을 포함시키라고 지시합니다.

이제 저장소의 상태를 확인해 봅시다.

git status

다음과 유사한 출력 결과가 나타날 것입니다.

On branch master

No commits yet

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

이 결과는 hello.py가 현재 스테이징 영역에 있으며, 커밋될 준비가 되었음을 알려줍니다.

왜 스테이징 영역이 필요할까요? 여행을 가기 위해 짐을 싸는 상황을 상상해 보세요. 스테이징 영역은 여행 가방과 같습니다. 물건 (변경 사항) 을 넣었다가 마음이 바뀌면 다시 뺄 수도 있습니다. 가방 안의 내용물이 모두 마음에 들 때 비로소 지퍼를 잠급니다 (커밋 생성). 이를 통해 각 커밋에 들어갈 내용을 세심하게 관리할 수 있으며, 프로젝트의 히스토리를 훨씬 더 깔끔하고 의미 있게 유지할 수 있습니다.

.gitignore 를 사용하여 파일 무시하기

때로는 임시 파일이나 보안이 중요한 정보처럼 Git 이 추적하지 않기를 바라는 파일이 있을 수 있습니다. Git 에서는 .gitignore라는 특별한 파일을 사용하여 이러한 파일들을 무시할 수 있습니다.

.gitignore 파일을 만들어 봅시다.

echo "*.log" > .gitignore

이 명령어는 확장자가 .log인 모든 파일을 무시하도록 설정하는 .gitignore 파일을 생성합니다.

이제 .gitignore가 잘 작동하는지 테스트하기 위해 로그 파일을 하나 만들어 보겠습니다.

echo "This is a log file" > debug.log

저장소 상태를 다시 확인해 보세요.

git status

출력 결과에서 debug.log는 보이지 않고, .gitignore만 목록에 나타나는 것을 확인할 수 있습니다.

On branch master

No commits yet

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

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

.gitignore 파일은 매우 강력합니다. 특정 파일이나 디렉토리 전체를 무시할 수 있고, 패턴 매칭을 사용하여 특정 조건에 맞는 파일들을 한꺼번에 제외할 수도 있습니다. 이는 실제 프로젝트에서 빌드 결과물, 캐시 파일, 또는 환경별 설정 파일처럼 Git 저장소에 포함되어서는 안 되는 파일들을 관리할 때 매우 유용합니다.

이제 변경 사항을 추가하고 커밋해 봅시다.

git add .gitignore
git commit -m "Initial commit with hello.py and .gitignore"

git diff 로 변경 사항 확인하기

프로젝트가 커짐에 따라 커밋하기 전에 변경 내용을 검토하고 싶을 때가 많을 것입니다. Git 은 이를 위해 git diff라는 강력한 명령어를 제공합니다.

hello.py 파일을 수정해 봅시다.

echo "print('Hello, Git! Welcome to the staging area.')" > hello.py

이제 git diff를 사용하여 무엇이 바뀌었는지 확인해 보겠습니다.

git diff

다음과 같은 출력이 나타날 것입니다.

diff --git a/hello.py b/hello.py
index ed51d3f..1385fe3 100644
--- a/hello.py
+++ b/hello.py
@@ -1 +1 @@
-print('Hello, Git!')
+print('Hello, Git! Welcome to the staging area.')

이 출력은 파일에서 정확히 어떤 부분이 변경되었는지 보여줍니다. -로 표시된 줄은 삭제된 내용을, +로 표시된 줄은 새로 추가된 내용을 의미합니다.

git diff는 마치 시간 여행자의 로그북과 같습니다. 자신이 작업한 내용을 정확히 확인할 수 있게 해주므로, 이전에 무엇을 했는지 기억해내거나 커밋 전 최종 검토를 할 때 매우 유용합니다. 또 다른 유용한 변형 명령어로 git diff --staged가 있습니다. 이 명령어는 스테이징 영역에 올렸지만 아직 커밋하지 않은 변경 사항들을 보여줍니다. 커밋 직전에 최종적으로 내용을 확인할 때 큰 도움이 됩니다.

q를 눌러 git diff 화면에서 빠져나오세요.

스테이징 취소하기

가끔 파일을 스테이징 영역에 추가했다가 마음이 바뀌는 경우가 있습니다. Git 을 사용하면 스테이징된 변경 사항을 쉽게 취소할 수 있습니다.

먼저, hello.py의 변경 사항을 스테이징 영역에 추가합니다.

git add hello.py

그런 다음, 이 변경 사항을 다음 커밋에 포함하고 싶지 않다고 가정해 봅시다. git restore 명령어를 사용하여 파일의 스테이징을 취소할 수 있습니다.

git restore --staged hello.py

상태를 확인해 봅시다.

git status

hello.py가 "Changes to be committed"(커밋할 변경 사항) 목록에서 빠져나와 "Changes not staged for commit"(커밋을 위해 스테이징되지 않은 변경 사항) 아래에 표시되는 것을 볼 수 있습니다.

파일을 스테이징 영역에 넣고 빼는 이 기능은 커밋에 대한 정밀한 제어권을 제공합니다. 마치 여행을 떠나기 전까지 가방을 원하는 만큼 쌌다 풀었다 할 수 있는 자유가 주어지는 것과 같습니다.

요약

축하합니다, Git 탐험가 여러분! 버전 관리 능력이 한 단계 더 성장했습니다. 이번 실습에서 배운 내용을 정리해 보겠습니다.

  1. git add를 사용하여 파일을 스테이징 영역에 추가하는 방법
  2. .gitignore를 사용하여 추적하지 않을 파일을 설정하는 방법
  3. 커밋 전 git diff를 통해 파일의 변경 사항을 검토하는 방법
  4. git restore --staged를 사용하여 스테이징을 취소하는 방법

이러한 기술들은 Git 워크플로우를 훨씬 더 세밀하게 제어할 수 있게 해줍니다. 특히 스테이징 영역은 포함할 변경 사항을 신중하게 선택하여 더 의미 있는 커밋을 만들 수 있게 해주는 강력한 기능입니다.

이 기술들이 중요한 이유는 다음과 같습니다.

  1. 선택적 커밋: 스테이징 영역을 통해 변경 사항 중 일부만 골라서 커밋할 수 있으므로, 작고 집중된 커밋을 만드는 데 도움이 됩니다.
  2. 파일 관리 효율성: .gitignore는 버전 관리가 필요 없는 파일들을 제외하여 저장소를 깨끗하게 유지해 줍니다.
  3. 변경 사항 검토: git diff를 통해 커밋 전 실수를 미리 발견하고 수정할 수 있습니다.
  4. 유연성: 스테이징 취소 기능을 통해 언제든 마음을 바꿀 수 있으므로, Git 사용에 대한 부담감이 줄어듭니다.

Git 여정을 계속하다 보면 이러한 기술들이 얼마나 가치 있는지 깨닫게 될 것입니다. 이는 복잡한 프로젝트를 수월하게 관리할 수 있게 해주는 고급 Git 워크플로우의 기초가 됩니다.

Git 에 능숙해지는 비결은 꾸준한 연습입니다. 실험하고 실수하는 것을 두려워하지 마세요. 그것이 바로 배우는 과정입니다! 계속해서 탐구하고 커밋하며 여러분의 프로젝트가 발전해가는 모습을 지켜보세요.

다음 Git 모험이 곧 시작됩니다. 호기심을 잃지 말고 즐겁게 코딩하세요!