![[Git] gitignore와 관리해야할 파일](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblk42g%2FbtsKBINe1YM%2Fb5LwphnVRZWp4ty8NBie00%2Fimg.png)
.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.java
만 gitignore
파일에 등록하면 해당 파일만 무시할 수 있습니다
이번에는 하나의 패키지를 트랙킹하지 않도록 등록해보겠습니다
하나의 디렉터리 등록
패키지 등록을 테스트해보기위해 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에 포함되지 않아야합니다
'Git' 카테고리의 다른 글
[Git] Commit Message Conventions (3) | 2024.10.30 |
---|---|
[Git] push된 커밋을 되돌리고 Commit단위를 쪼개고 메시지 다시 작성하기 (1) | 2024.10.24 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!