오류해결

[트러블슈팅] Git 파일명 대소문자 변환 인식 불가 문제

TERRY✨ 2024. 8. 14. 17:29
더보기

동아리 프로젝트의 이미지 파일명의 대소문자를 변경해야하는 필요가 있어서 변경했던 적이 있었다. 당연히 git이 이러한 변경사항을 인지했을거라고 생각했고(그냥 당연하다고 생각했다) 다른 파일들의 변경사항들이 있어서 git add . 로 바로 합쳐서 commit을 진행했다(이것도 내 실수,, 어떤 파일이 어떤 상태에서 처리되고 있는지 계속 확인하고 올바르게 커밋하는 습관을 들였어야 했는데 변경된 파일들 다 들어갔겠지~하고 넘어갔었다..) 

 

결국 내가 바꿔놨던 이미지 파일의 변경사항이 반영안된 상태로 깃허브에 계속 남아있게 됐고,,

 

그 버전을 채은이가 clone하게 되었다(문제의 시발점...)

 

채은이가 코드를 수정할때마다 코드에서 이미지 파일명을 수정해서(왜냐하면 현재 코드 내의 이미지 파일 명은 내 버전이랑 똑같은데 채은이가 clone받은 이미지 파일명은 대소문자 변경이 되기 전 파일명이기 때문) commit하고 내가 pull 받을 때마다 계속 코드 내의 이미지 파일명이 바뀌는 것이다! 그래서 내 코드에서는 다른 파일명(대소문자가 다른)의 import를 요청하고 있어서 오류가 뜨고 있었다. 

 

알고보니 git은 대소문자를 구분하지 않는다고 한다.

이를 해결한 과정(부끄럽지만 1호선 지하철에서 혼자 맥북을 켜고 해결을 했다)을 담았다. 

위 접은 글은 어쩌다 이 문제를 맞닥드리게 됐는지에 대한 주절주절 호소하는 글이다..
 
짧게 설명하자면 git은 파일명의 대소문자의 변경사항을 인지하지 못한다는 것이다.
문제는 그렇게 됐을 경우, 나와 협업하고 있는 팀원의 코드가 잘 작동하지 않을 수 있다는 것이다!
 
하지만 간단한 git 설정으로 대소문자를 구분하지 못하는 이 설정을 해제할 수 있다.

👉🏻 git 명령어로 설정하기

git config core.ignorecase false

이를 수행하면 git이 파일 대소문자를 구별할 수 있다.
 
이후 파일명을 바꾸고 commit을 진행하면 된다.

👉🏻 로컬과 github 파일명이 다른 경우

git config core.ignorecase false

# 내 로컬에 있는 파일은 유지한채 원격 파일을 삭제
git rm -r --cached .  

# 모든 파일을 stage 상태로 추가
git add .

# commit
git commit -m '커밋메세지'

🧐 왜 구분하지 못하게 만든 것일까?

https://git-scm.com/docs/git-config/2.14.6#Documentation/git-config.txt-coreignoreCase

 
즉, 파일시스템에서 git이 더 잘 작동하기 위해서 그렇게 만든 것이라고 생각하면 된다.
글에서 설명하는 것처럼 MakeFile 을 찾고 있는데 makefile 을 발견한다면 같은 파일이라고 생각하는 것이다.
기본적으로는 false값으로 설정되지만 git 저장소가 생성될 때는 true로 세팅된다고 한다.