Git

[Git] gitignore와 관리해야할 파일

leegeonwoo 2024. 11. 8. 04:33

.gitignore 파일은 Git의 root 디렉토리에 저장되어 Git Repository에 추가되지 않아야하는 폴더나 파일들을 정의하는 파일이다.
예를 들어서 스프링 애플리케이션에서 secret-key와 같은 값을 가지고 있는 application.properties파일을 Git을 사용하여 관리하고 Remote Repository에 올릴 경우 내부에서 관리해야하는 secret-key를 외부에 공개함으로써 보안 문제가 발생할 수 있는 것이다

따라서 Git을 통해 프로젝트를 관리할 때 가장 먼저 gitignore파일을 정의하여 어떤 파일들을 Git을 통해 트랙킹 하지 않도록 할 것인지 정의하는게 우선이다

 

무시할 파일 등록하기

그렇다면 어떻게 파일을 등록하고 무시할 파일의 범위를 지정하는 방법에 대해 알아보자
개발자라면 친근할 와일드카드 패턴형식을 주로 사용하기도하며 특정 폴더, 파일이름을 직접 명시하여 무시할 파일을 등록할 수도 있다

이해를 돕기위해 예시 프로젝트를 통해 학습해보자
아래의 프로젝트 구조를 갖는 프로젝트를 생성해주었다

 


필자는 인텔리제이 유료버전을 사용하기때문에 프로젝트를 git으로 관리할 경우 root디렉터리에 .gitignore파일을 자동으로 만들어준다

 

하나의 파일 등록
level1이라는 패키지를 생성하고 해당 패키지안에 Level1Class, Level2Class라는 클래스를 생성한 뒤 .gitignore파일에 /src/level1/Level1Class.java를 등록해주겠습니다

그럼 인텔리제이에서는 위와 같이 Level1Class파일이 회색으로 변경되어 무시되고있다는 것을 알려줍니다
정말 .git파일이 Level1Class를 무시하고 있는지 확인하기위해 git status명령어로 추적파일 상태를 조회해보면 Level1Class가 트랙킹되고있지 않는다는 것을 확인할 수 있습니다

 

참고로 /src/level1/Level1Class.java와 같이 파일의 절대경로를 모두 입력해주지 않아도 Level1Class.javagitignore파일에 등록하면 해당 파일만 무시할 수 있습니다

이번에는 하나의 패키지를 트랙킹하지 않도록 등록해보겠습니다

 


하나의 디렉터리 등록
패키지 등록을 테스트해보기위해 level2라는 패키지를 생성하고 해당 패키지 안에 Test1,Test2,Test3클래스 파일을 만들어 줍니다

 

빨간색으로 표시되는 파일은 git에 의해 트랙킹되고 있지 않다는 것을 의미합니다
이 때 다양한 예외상황을 설명하기위해 Test3파일을 스테이징 처리하고 .gitignore파일에 패키지를 트랙킹하지 않도록 src/level2를 추가해줍니다

 


그럼 위와 같은 결과를 얻게되는데 분명 level2패키지를 트랙킹하지 않도록 설정했지만 Test3.java파일은 git에 의해 트랙킹되고 있는 것을 확인할 수 있습니다
이 상태에서 commit을 보낼 경우 Test3을 커밋하고 싶지 않지만 의도하지 않은대로 동작하게 될 것입니다

이렇게 한 번 스테이징에 올린 파일은 이미 git에서 트랙킹을 하도록 허용한거나 다름 없기때문에 .gitignore파일에 등록하더라도 스테이징된 파일은 무시되지 않는 것 입니다

만약 이미 스테이징한 Test3파일을 무시하고 싶다면 git reset명령어를 통해서 Test3파일의 스테이징에서 내리면 정상적으로 level2패키지가 ignore될 것 입니다

 

그럼 어떤 파일들을 트랙킹하지 않아야하나요?

 

운영체제의 의해 생성되는파일
macOS를 예시로는 .DS_Store파일이 있다
프로젝트는 모든 운영체제에서 호환되어야하며 해당 프로젝트를 clone하여 사용한다 하더라도 운영체제에서 알아서 필요한 파일을 자동으로 생성해주기때문에 불필요한 파일이므로 트랙킹할 필요없다

  • .DS_Store
  • Thumbs.db,desktop.ini

컴파일된 파일
Java를 예시로 Java는 *.java파일만 있으면 컴파일 과정을 통해서 *.class파일을 얻어낼 수 있기때문에 class파일을 트랙킹하는 것은 불필요한 자원이기때문에 컴파일 과정에서 생성되는 파일 또한 git을 통해 트랙킹할 필요가 없다

  • *.class
  • *.pyc

IDE관련 파일
모든 개발자는 각자의 개발환경을 사용하여 개발하고 IDE도 마찬가지로 어떤 이는 이클립스를 어떤 이는 인텔리제이를 사용할 수 있다
따라서 IDE가 생성하는 환경 설정 파일은 트랙킹하지 않는 것이 좋다

  • .idea/
  • .iml

로그 파일
로그파일은 보통 개발, 운영, 테스트 환경에서 디버깅을 위해 주로 사용되는데 이 파일들은 다른 환경에서 요구되지 않으며 사용자의 민감한 정보가 포함될 수 있기때문에 로그파일 또한 트랙킹에서 제외해야한다

설정 파일
위의 예제에서 살펴봤듯이 secret-key와 같은 API키, 데이터베이스 비밀번호가 포함된 .proertis와 같은 파일 또한 민감한 정보이므로 git에 포함되지 않아야합니다

728x90