Git 캐시 파일 제거 방법

GitBeginner
지금 연습하기

소개

Git 은 개발자가 프로젝트의 파일 히스토리를 관리하는 데 도움이 되는 강력한 버전 관리 시스템입니다. 때로는 더 이상 Git 이 추적하지 않기를 원하지만 로컬 디렉토리에는 유지하고 싶은 파일이 리포지토리에 캐시될 수 있습니다. git rm --cached 명령을 사용하면 작업 디렉토리에서 파일을 보존하면서 Git 의 추적 시스템에서 파일을 제거할 수 있습니다. 이 튜토리얼에서는 이 명령을 효과적으로 사용하여 리포지토리를 정리하고 워크플로우를 최적화하는 방법을 알려드립니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 77%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

샘플 Git 리포지토리 생성

Git 에서 캐시된 파일을 제거하는 방법을 이해하기 위해 먼저 몇 개의 파일이 있는 샘플 리포지토리를 설정해 보겠습니다. 이렇게 하면 Git 캐싱이 실제로 어떻게 작동하는지 확인할 수 있습니다.

Git 캐싱 이해

git add 명령을 사용하여 Git 에 파일을 추가하면 Git 은 해당 파일을 인덱스 (스테이징 영역이라고도 함) 에 저장합니다. 이러한 파일은 이제 "캐시"되거나 스테이징되어 리포지토리에 커밋되기를 기다립니다. 때로는 이러한 파일의 스테이징을 해제하거나 로컬 파일 시스템에서 삭제하지 않고 Git 의 추적에서 제거해야 할 수 있습니다.

리포지토리 설정

작업할 간단한 Git 리포지토리를 만들어 보겠습니다.

  1. LabEx VM 환경에서 터미널 창을 엽니다.
  2. 프로젝트 디렉토리로 이동합니다.
cd ~/project
  1. 테스트 리포지토리를 위한 새 디렉토리를 만듭니다.
mkdir git-cache-demo
cd git-cache-demo
  1. 새 Git 리포지토리를 초기화합니다.
git init

다음과 유사한 출력이 표시됩니다.

Initialized empty Git repository in /home/labex/project/git-cache-demo/.git/
  1. Git 사용자 정보 구성 (커밋에 필요):
git config user.name "LabEx User"
git config user.email "labex@example.com"

이제 파일을 추가할 준비가 된 새로운 Git 리포지토리가 있습니다. 다음 단계에서는 몇 개의 파일을 만들고 Git 의 추적 시스템에 추가하여 나중에 캐시에서 제거하는 연습을 할 수 있습니다.

리포지토리에 파일 추가

이제 Git 리포지토리를 설정했으므로 몇 개의 파일을 만들고 Git 의 추적 시스템에 추가해 보겠습니다. 이렇게 하면 파일이 Git 에서 "캐시"된다는 것이 무엇을 의미하는지 이해하는 데 도움이 됩니다.

파일 생성 및 추가

  1. 먼저, 리포지토리에 몇 가지 다른 유형의 파일을 만들어 보겠습니다.
## Create a text file
echo "This is a sample text file" > sample.txt

## Create a config file
echo "debug=true" > config.ini

## Create a log file (which we typically don't want to track)
echo "2023-01-01: System started" > app.log
  1. 리포지토리의 상태를 확인합니다.
git status

다음과 유사한 출력이 표시됩니다.

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	app.log
	config.ini
	sample.txt

nothing added to commit but untracked files present (use "git add" to track)

이는 Git 이 인식하지만 아직 추적되지 않은 세 개의 파일이 있음을 보여줍니다.

  1. 모든 파일을 Git 의 스테이징 영역 (캐시) 에 추가해 보겠습니다.
git add .
  1. 상태를 다시 확인합니다.
git status

이제 다음을 볼 수 있습니다.

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   app.log
	new file:   config.ini
	new file:   sample.txt

이제 Git 이 git rm --cached <file>을 사용하여 파일의 스테이징을 해제할 수 있다고 알려줍니다. 파일은 이제 Git 의 스테이징 영역에 캐시되어 커밋되기를 기다리고 있습니다.

  1. 이러한 파일을 커밋하여 리포지토리의 히스토리의 일부로 만듭니다.
git commit -m "Initial commit with sample files"

이제 Git 의 추적 시스템에 파일을 성공적으로 추가했습니다. 다음 단계에서는 로컬 디렉토리에 파일을 유지하면서 Git 의 캐시에서 특정 파일을 제거하는 방법을 배우겠습니다.

Git 캐시에서 단일 파일 제거

이제 Git 에서 추적하는 파일이 있으므로 로컬 디렉토리에 유지하면서 Git 의 추적에서 특정 파일을 제거하는 방법을 알아보겠습니다. 이는 로그 파일, 임시 파일 또는 민감한 정보가 포함된 파일과 같이 실수로 제외해야 하는 파일을 커밋한 경우에 흔히 필요합니다.

Git 캐시에서 파일을 제거하는 이유

Git 캐시에서 파일을 제거하려는 데에는 몇 가지 이유가 있습니다.

  1. 실수로 민감한 정보가 포함된 파일을 추가했습니다.
  2. 로그 또는 컴파일된 파일과 같은 큰 바이너리 파일을 제외하려는 경우
  3. .gitignore 파일을 설정하고 이미 추적된 파일을 제거해야 하는 경우

Git 추적에서 app.log 제거

app.log 파일이 Git 에서 추적되지 않아야 한다는 것을 깨달았다고 가정해 보겠습니다.

  1. 먼저, Git 이 현재 파일을 추적하고 있는지 확인해 보겠습니다.
git ls-files

세 개의 파일이 모두 나열되어야 합니다.

app.log
config.ini
sample.txt
  1. 이제 로컬 디렉토리에 유지하면서 app.log를 Git 의 추적 시스템에서 제거해 보겠습니다.
git rm --cached app.log

확인 메시지가 표시됩니다.

rm 'app.log'
  1. 상태를 다시 확인합니다.
git status

이제 app.log가 추적되지 않는 파일로 나열됩니다.

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	deleted:    app.log

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

이는 Git 이 다음 커밋에서 파일 추적을 중지하지만 파일은 여전히 로컬 디렉토리에 존재함을 의미합니다.

  1. 파일이 여전히 작업 디렉토리에 있는지 확인해 보겠습니다.
ls -la

app.log가 여전히 거기에 있는 것을 볼 수 있습니다.

  1. 이 변경 사항을 커밋하여 Git 추적에서 파일 제거를 완료합니다.
git commit -m "Remove app.log from Git tracking"
  1. Git 이 더 이상 파일을 추적하지 않는지 확인합니다.
git ls-files

이제 다음만 표시됩니다.

config.ini
sample.txt

하지만 app.log 파일은 여전히 로컬 디렉토리에 있습니다.

cat app.log

출력:

2023-01-01: System started

축하합니다! 로컬 디렉토리에 유지하면서 Git 캐시에서 파일을 성공적으로 제거했습니다. 다음 단계에서는 여러 파일을 처리하고 .gitignore를 사용하여 워크플로우를 개선하는 방법을 배우겠습니다.

여러 파일 및 디렉토리 작업

이제 Git 캐시에서 단일 파일을 제거하는 방법을 알았으므로 여러 파일 또는 전체 디렉토리를 제거하는 것과 같은 더 복잡한 시나리오를 살펴보겠습니다.

연습을 위한 더 많은 파일 생성

먼저 연습을 위해 몇 개의 파일과 디렉토리 구조를 더 만들어 보겠습니다.

  1. 디렉토리와 몇 개의 추가 파일을 만듭니다.
## Create a directory for temporary files
mkdir temp

## Create some files in the temp directory
echo "This is a temporary file" > temp/temp1.txt
echo "Another temporary file" > temp/temp2.txt

## Create another log file in the main directory
echo "2023-01-02: System updated" > system.log
  1. 이러한 새 파일을 Git 추적에 추가합니다.
git add .
  1. 변경 사항을 커밋합니다.
git commit -m "Add temporary files and system log"
  1. Git 이 모든 파일을 추적하고 있는지 확인합니다.
git ls-files

다음과 같은 내용이 표시됩니다.

app.log
config.ini
sample.txt
system.log
temp/temp1.txt
temp/temp2.txt

Git 캐시에서 여러 파일 제거

이제 모든 로그 파일과 전체 temp 디렉토리를 Git 추적에서 제거하려는 경우를 가정해 보겠습니다.

  1. 로그 파일을 Git 추적에서 제거합니다.
git rm --cached system.log
  1. temp 디렉토리의 모든 파일을 재귀적으로 제거합니다.
git rm --cached -r temp/

-r 플래그는 Git 에 디렉토리의 모든 파일을 캐시에서 재귀적으로 제거하도록 지시하므로 여기에서 중요합니다.

  1. 상태를 확인합니다.
git status

로그 파일과 temp 디렉토리의 모든 파일이 Git 추적 시스템에서 삭제되도록 스테이징된 것을 볼 수 있습니다.

On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
	deleted:    system.log
	deleted:    temp/temp1.txt
	deleted:    temp/temp2.txt

Untracked files:
(use "git add <file>..." to include in what will be committed)
	system.log
	temp/
  1. 이러한 변경 사항을 커밋합니다.
git commit -m "Remove logs and temp directory from Git tracking"
  1. Git 이 더 이상 이러한 파일을 추적하지 않는지 확인합니다.
git ls-files

이제 다음만 표시됩니다.

app.log
config.ini
sample.txt

그러나 모든 파일은 여전히 로컬 디렉토리에 있습니다.

ls -la
ls -la temp/

.gitignore 를 사용하여 원치 않는 파일 추적 방지

이제 Git 추적에서 파일을 제거했으므로 실수로 다시 추가되는 것을 방지하기 위해 .gitignore 파일을 설정해 보겠습니다.

  1. .gitignore 파일을 만듭니다.
nano .gitignore
  1. 다음 패턴을 파일에 추가합니다.
## Ignore log files
*.log

## Ignore temp directory
temp/
  1. 저장하고 종료합니다 (Ctrl+X, Y, Enter).

  2. .gitignore 파일을 추가하고 커밋합니다.

git add .gitignore
git commit -m "Add .gitignore file"

이제 모든 파일을 Git 에 추가하려고 시도하더라도 .gitignore 파일을 존중하고 지정된 패턴을 추적하지 않습니다.

git add .
git status

로그 파일과 temp 디렉토리가 Git 추적에 추가되지 않는 것을 볼 수 있습니다.

이제 Git 캐시에서 여러 파일 및 디렉토리를 제거하고 .gitignore 파일을 사용하여 특정 파일이 향후 추적되지 않도록 하는 방법을 배웠습니다.

고급 기술 및 모범 사례

이제 Git 캐시에서 파일을 제거하는 기본 사항을 이해했으므로 워크플로우를 개선하기 위한 몇 가지 고급 기술과 모범 사례를 살펴보겠습니다.

한 번에 파일 제거 및 무시

Git 에서 이미 추적하고 있는 파일이 있고 추적에서 제거하고 .gitignore 파일에 추가하려는 경우 이 효율적인 접근 방식을 사용할 수 있습니다.

  1. 무시하려는 새 파일 형식을 만들어 보겠습니다.
## Create a build directory with some compiled files
mkdir build
echo "Compiled binary data" > build/app.bin
echo "Configuration for build" > build/build.conf
  1. 이러한 파일을 Git 에 추가합니다.
git add build/
git commit -m "Add build files temporarily"
  1. 이제 Git 추적에서 제거하고 .gitignore 파일을 한 워크플로우에서 업데이트해 보겠습니다.
## First, edit the .gitignore file to add the build directory
echo "## Ignore build directory" >> .gitignore
echo "build/" >> .gitignore

## Now remove the tracked files from Git's cache
git rm --cached -r build/

## Commit both changes together
git add .gitignore
git commit -m "Remove build directory from tracking and add to .gitignore"
  1. 파일이 더 이상 추적되지 않지만 로컬에 여전히 존재하는지 확인합니다.
git ls-files
ls -la build/

민감한 정보 처리

비밀번호 또는 API 키와 같은 민감한 정보가 포함된 파일을 실수로 커밋한 경우 Git 캐시에서 제거하는 것은 첫 번째 단계일 뿐입니다. Git 은 모든 커밋의 기록을 유지하므로 민감한 정보는 여전히 리포지토리 기록에 존재합니다.

민감한 정보의 경우 다음을 수행해야 합니다.

  1. 우리가 배운 대로 Git 캐시에서 파일을 제거합니다.
  2. 손상된 비밀번호 또는 키를 변경합니다.
  3. git filter-branch 또는 BFG Repo-Cleaner 와 같은 도구를 사용하여 기록에서 민감한 데이터를 제거하는 것을 고려합니다.

이것은 이 튜토리얼의 범위를 벗어나지만 이러한 제한 사항을 인식하는 것이 중요합니다.

Git 캐시 관리를 위한 모범 사례

다음은 따라야 할 몇 가지 모범 사례입니다.

  1. 프로젝트 초기에 좋은 .gitignore 파일을 만듭니다: 이렇게 하면 원치 않는 파일이 실수로 추적되는 것을 방지할 수 있습니다.

  2. 일반적인 패턴에 대해 전역 .gitignore 파일을 사용합니다: 모든 리포지토리에 적용되는 전역 .gitignore 파일을 설정할 수 있습니다.

git config --global core.excludesfile ~/.gitignore_global
  1. git add .에 주의합니다: 이 명령은 추적되지 않은 모든 파일을 추가합니다. 가능한 경우 git add <file>과 같은 더 구체적인 명령을 사용합니다.

  2. 커밋하기 전에 변경 사항을 검토합니다: 항상 git statusgit diff --cached를 사용하여 커밋하려는 내용을 검토합니다.

  3. 일반적인 작업에 대한 별칭을 사용합니다: 예를 들어 캐시된 파일을 제거하기 위한 별칭을 설정할 수 있습니다.

git config --global alias.uncache 'rm --cached'

그런 다음 다음을 사용할 수 있습니다.

git uncache <file>

이러한 기술과 모범 사례를 통해 이제 깨끗하고 효율적인 리포지토리를 유지하기 위해 Git 캐시를 효과적으로 관리하는 방법에 대한 포괄적인 이해를 갖게 되었습니다.

요약

이 튜토리얼에서는 로컬 디렉토리에 파일을 유지하면서 git rm --cached 명령을 효과적으로 사용하여 Git 추적 시스템에서 파일을 제거하는 방법을 배웠습니다. 다음은 수행한 작업입니다.

  1. Git 리포지토리를 설정하고 Git 캐싱의 개념을 배웠습니다.
  2. 파일을 Git 추적 시스템에 추가했습니다.
  3. git rm --cached를 사용하여 Git 캐시에서 개별 파일을 제거했습니다.
  4. 재귀 옵션 (-r) 으로 여러 파일 및 디렉토리를 관리했습니다.
  5. .gitignore를 사용하여 원치 않는 파일이 추적되지 않도록 했습니다.
  6. Git 캐시 관리를 위한 고급 기술 및 모범 사례를 탐구했습니다.

이러한 기술은 깨끗하고 효율적인 Git 리포지토리를 유지하고, 원치 않는 파일의 추적을 방지하며, 민감한 정보를 보호하는 데 도움이 됩니다. Git 이 어떤 파일을 추적할지 적절하게 관리함으로써 임시 파일, 로그 및 빌드 아티팩트를 무시하면서 중요한 코드 및 구성 파일에 집중할 수 있습니다.

Git 캐시에서 파일을 제거해도 로컬 파일 시스템에서 파일이 삭제되지 않는다는 점을 기억하세요. Git 에 해당 파일의 추적을 중단하도록 지시하는 것뿐입니다. 이는 리포지토리의 내용을 관리하고 프로젝트 기록에 필요한 파일만 포함되도록 하는 강력한 도구입니다.