관리 메뉴

제뉴어리의 모든것

.gitignore 파일 주의사항 본문

Git

.gitignore 파일 주의사항

제뉴어리맨 2022. 10. 22. 15:24

틀린 내용은 즉각 수정할테니 피드백 환영입니다.

 

전체항목

  • .gitignore란
  • .gitignore 의 작성 룰
  • .gitignore 주의사항
  • 내가 겪은 상황

.gitignore란

git이 관리하는 대상에서 제외하고 싶은 파일, 폴더를 명시해둔 파일

 

 

.gitignore 의 작성 룰

  • .gitignore 파일은 프로젝트 최상위 위치에 존재해야한다.
  • 아래의 패턴을 활용하여 git이 untracked할 파일 또는 디렉토리등을 정의하여 파일을 생성한다.

패턴

작성 패턴은 아래의 규칙을 따른다.

  • '#'로 시작하는 라인은 무시한다.
  • 표준 Glob 패턴을 사용한다.
  • 슬래시(/)로 시작하면 하위 디렉터리에 적용되지(recursivity) 않는다.
  • 디렉터리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.
  • 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.

 

.gitignore 주의사항

  • 이미 git에 의해 tacking 되는 파일 혹은 디렉토리는 .gitignore에 명시하여도 영향을 받지 않음.
    tracking 되고 있다는것은
    이미 unstaging이라고 감지된것과
    이미 staged 된것
    그리고 이미 commit 영역에 존재하는것들 
    모두이다.
    그러므로, .gitignore에 명시한것을 적용시키고 싶다면
    .gitignore 안에 먼저 명시를 한뒤, 무시할 파일, 디렉토리를 git 영역안에 넣어야한다.

  • .gitignore파일은 git 영역 안에서 여러개가 존재할 수 있다.

 

내가 겪은 상황

  • 상황
    intellij로 기본 java 프로젝트를 생성하면 최상위 프로젝트에 .idea 폴더가 생성이된다.
    그리고 그 .idea 폴더 안에 .gitignore 파일이 생긴다.
    그런데 intellij로 java 프로그램 (main 메소드) 을 실행 시키면
    out 폴더 폴더가 생성된다. 해당 폴더는 Run을 할때마다 생성 혹은 갱신을 한다.
    그래서 생성된 out 폴더를 내가 삭제를 해도 다시 Run을 하면 또 생성이 된다.
    즉, 굳이 git에 영역에 들어갈 필요가 없는 폴더이다.
    그런데, 계속 run을 할때마다 뭔가 파일의 내용이 변경이 일어나서 계속 out 폴더를, 실제 내가 수정한 내용들과 함께 commit을 해줘야했다.
    디렉토리 구조가 아래와 같은 상황이다.

그래서 
우선 out 폴더를 삭제하고, .gitignore 파일내에 아래와 같이 정의를 해주었다.

:
:

### out폴더를 제외 시키기 위한 설정 ###
../out/

:
:

.gitignore 파일이 out 폴더보다 하위에 있기 때문에 위와같이 상대경로로 적어줬다.

그리고 프로젝트는 run 을해서 out 폴더를 다시 생성되게 만들고

git status 로 확인해보니...

다시 또 out 폴더를 git의 tracking되고 있었다...

그래서 이것저것 시도를 해보다,
발견한것이 .gitignore는 여러개 존재해도 된다는 내용이다
그래서 아래처럼 .gitignore를 최상위 경로에 두고 .gitignore 내용을 수정하여 적용해보았다.

:
:

### 제외시킬 out 폴더 ###
out/

:
:

 

결과는.. 성공이였고 out폴더가 git 에 관리에서 벗어날 수 있었다.

 

 

결론

정확히는 git에 대해 더 알아봐야 겠지만,

.gitignore에서 상대경로로 상위 디렉토리를 git의 관리로부터 벗어나게 하는것은 불가능하다.

그러므로 해당 프로젝트의 모든 내용을 .gitignore에 적용할 수 있도록 하고 싶다면

.gitignore를 최상위에 위치시키자.

 

 

 


 

git 레퍼런스 : https://git-scm.com/docs/gitignore

작성 패턴 참조 :

https://velog.io/@psk84/.gitignore-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0