Stop file tracking in Git

1 분 소요


0. 들어가면서

현재 프로젝트를 마무리하고 있다. 안정적인 시스템 운영을 위해 환경 설정 파일을 분리했다. 이들 중 어떤 설정 파일은 깃(git)으로 관리가 필요하지만, 어떤 파일은 추적이 필요하지 않았다. 필자는 다음 요건에 맞게 application.yml 파일을 관리하고 싶었다.

  • 원격 레포지토리에서 application.yml 파일을 관리한다.
  • application.yml 파일에 대한 필요한 변경 사항은 추적 관리가 필요하다.
  • 개발자의 로컬 컴퓨터에서 application.yml 파일을 임시 변경한 경우 실수로 업로드하는 상황을 막고 싶다.

이 글은 로컬 컴퓨터에서 임시로 변경한 내용을 원격 레포지토리로 업로드하는 것을 어떻게 방지할 수 있는지에 대해 정리했다.

1. .gitignore File

추적에서 제외하고 싶은 경우 .gitignore 파일을 사용할 수 있다. 변경 추적을 제외하고 싶은 파일은 .gitignore에 추가한다.

HELP.md
target/
/target/
**/target
out/
/out/
**/out
bin/
/bin/
**/bin
!.mvn/wrapper/maven-wrapper.jar

# 추적 대상에서 제외할 파일
/src/main/resources/application.yml

이미 추적 관리 중인 파일은 .gitignore 파일에 추가하더라도 추적 대상에서 제외되지 않는다. 필자는 application.yml 파일을 이미 추적을 관리하고 있었기 때문에 이 방법은 사용할 수 없었다.

2. Remove Git Cache

스테이지(stage)에 올라간 파일은 캐싱(caching) 되어 있기 때문이다. 캐시를 지우면 깃 추적 대상에서 제외할 수 있다.

$ git rm --cached src/main/resources/application.yml
rm 'src/main/resources/application.yml'

추적 대상에서 제외하는 경우 원격 레포지토리에 있는 application.yml 파일이 삭제되기 때문에 문제가 될 수 있다. 필자의 경우 원격 레포지토리에 위치한 application.yml 파일을 삭제하면 안 되기 때문에 이 방법은 사용할 수 없었다.

3. Git Command for update-index

필자는 원격 레포지토리에 application.yml 파일이 존재하지만, 개발자의 로컬 컴퓨터에서 임시로 변경한 설정이 실수로 원격 레포지토리에 업로드 되는 것을 방지하고 싶었다. 프로젝트 .git/info 경로에 위치한 exclude 파일을 사용하면 특정 파일에 대한 추적을 로컬 컴퓨터에서만 제외할 수 있다는 글들이 있지만, 필자의 경우 정상적으로 동작하지 않았다.

git update-index 명령어를 사용하면 특정 파일에 대한 변경 감지를 선택적으로 수행할 수 있다. 명령어는 다음과 같다.

  • 변경 감지 대상에서 제외한다.
$ git update-index --assume-unchanged src/main/resources/application.yml
  • 변경 감지 대상에 제외한 것을 취소한다.
$ git update-index --no-assume-unchanged src/main/resources/application.yml

변경 감지 대상에서 제외하면 개발자 로컬 컴퓨터에서 임시로 변경한 내용이 추적되지 않으므로 원격 레포지토리로 업로드 되지 않는다. 필요한 변경이 있는 경우 변경 감지 대상에서 제외한 것을 취소하면 된다.

REFERENCE

카테고리:

업데이트:

댓글남기기