GitHub

gitignore에 추가했는데 변동사항이 자꾸 커밋되는 이유가 뭘까?

용용띠용 2025. 5. 15. 14:02

문제 상황1

: application.properties에는 DB의 username, password 등의 보안과 관련된 정보가 입력되어 있다. 따라서 보안을 위해 gitignore에 포함시켜 커밋을 방지하고자 했다. 

spring.datasource.url=[URL]
spring.datasource.username=[USER_NAME]
spring.datasource.password=[PASSWORD]

 

이런 형태로 초기화를 시키고 커밋을 한 후 gitignore에 application.properties의 경로를 입력해두었다. 그런 후 application.properties에 변동사항을 생성하고 다시 커밋을 하여 gitignore에 잘 적용이 됐는지 확인했다. 그러나 git에는 변동사항이 반영되어 있었다. 

 

원인

: .gitignore은 새롭게 git의 추적 대상이 되려는 파일에 대해서만 적용된다.

즉 이미 application.properties는 커밋된 적 있기 때문에 .gitignore에 추가해 두어도 적용되지 않는다는 것이다. 

 

해결책

git rm --cached 해당파일경로

이를 활용해서 해당 파일을 무시하도록 할 수 있다. 

- rm은 remove를 의미하고 --cached는 스테이징 영역(git의 인덱스)을 의미한다.

위 명령어로 인해 로컬에서는 파일이 삭제되지 않지만 git에서는 삭제되며 git의 추적을 끊게 된다.

 

 

문제 상황 2

spring.datasource.url=[URL]
spring.datasource.username=[USER_NAME]
spring.datasource.password=[PASSWORD]

: 해당 형태로 git에 파일이 남아있고 이후 변동사항이 적용되지 않도록 하는 것이 본래의 목적이었다. 그러나 첫 번째 해결책을 따르면 git에서 해당 파일 자체가 사라지게 된다. 

 

해결책

git update-index --assume-unchanged 해당파일경로

: git이 해당 파일의 변경을 무시하게 설정한다. 

- update-index: git의 인덱스(추적 정보)를 조작하는 명령어

- --assume-unchanged: 파일이 바뀌지 않다고 가정하는 명령어

=> 파일에 변동 사항이 발생해도 무시하게 되어 git status에 뜨지 않고, 커밋 대상에도 포함되지 않는다. 

 

다시 추적하도록 하는 방법(참고)

git update-index --no-assume-unchanged 해당파일경로

 

 

정리

  .gitignore git update-index --assume-unchanged
목적 특정 파일을 무시하고 싶을 때 변동 사항을 무시하고 싶을 때
대상 git에 올라가지 않은 파일(추적되고 있지 않은 파일) 이미 git에 올라간 파일(추적되고 있는 파일)
추적 여부 추적x 추적은 하지만 변경 감지x
해지 .gitignore에서 제거 .git update-index --no-assume-unchanged