물망초.

왜 대소문자를 구분을 하지 못하니!!!(feat. Git)

티포리아 2020. 8. 12. 23:58

요점! git config core.ignorecase false 와 git mv source destination

안녕하세요 :)
오랜만에 글을 남기네요!

오늘 물망초에 남기는 글은 제가 최근에 겪은 일을 잊지 않기 위해 남깁니다.
git config에 git config core.ignorecase 옵션이 있습니다.
왜 있을까요?
제가 오늘 지옥을 경험한 얘길 들려드리며 저도 잊지 않기 위해 기록하겠습니다.

사건의 제목: 아니!! 왜 폴더에 대문자를 뺐는데!!! import에 에러가 안나는거야!?!

nextjs 로 작업 중에 저는 무의식 중에 대문자를 사용하여 폴더명을 짓게 되었습니다.

components/Post

음 좋아 Post에 만들어질 애들을 다 때려박아 볼까?
음 Comment, Contents, TitleWrapper... 등등
아! 좋아 그럼 테스트를 짜면서 작업을 좀 해볼까?

폴더는 components/__tests__/Post/ 에 만들어야겠다!

그렇게 저는 하나 둘 폴더에 만들기 시작했습니다.
그러다 문득 저는 깨달았죠.
아.. 이거 snake_case로 가야할거 같은데.. 폴더명도.. 음...
그 때부터 저는 부랴부랴 vscode 의 우클릭 rename 을 통해 폴더명을 바꾸기 시작했습니다.

components/post, components/__tests__/post

후.. 다 바꿨다.
그럼 어디 다시 테스트를 돌려볼까! yarn test!
슈슈숙 완료되는 테스트들!
좋아좋아! 완벽해!(이때 왜 정신을 놓고 완벽하다고 했는지.. 아직도 의문입니다...:-()

그렇게 작업을 마치고

git add .
git commit -m "feat(Post): Post 내부를 구성하는 컴포넌트 생성 및 테스트"
git push origin feature/create_post

자! 태근 이야! (저는 퇴근은 태근이라고 자주.. 씁니다.)

"자 그럼! 떠야겠군!" 이라고 생각하는 찰나
업둥이 같은 저를 업고 개발해주시는 분께서, 어.. develop에서 테스트 오류가 24개 나 나는데요!!?

네에!!? 테스트 에러가 24개 나요!!?

그렇게 자리에 다시 착석하고 현재 반영된 develop을 checkout 하여 다시 훑기 시작했습니다.
이상하게도 제 macbook pro 에서는 정상적으로 테스트가 돌아가는데..
다른 개발자분 자리에서는 에러가 나는 것이었습니다.

그러다 문득 발견했습니다.

왜!? 테스트 코드에서만 나지..? 설마 import..? from path 문제인가!!?

폴더명은 post 로 변경되었는데, import문의 from에는 Post 로 되어있었습니다..
근데 여기서.. 궁금해졌던게 왜 내 자리에서는 문제가 없었지?

그렇게 경로 문제를 해결하여 다시 fixpush 하고,
스택오버플로우(천재들의 집합소) 를 뒤적였습니다.
그리고 발견했습니다.

stackoverflow - How do I commit case-sensitive only filename changes in Git?

이슈 를 확인해보면,(제 주관적인 해석이 있습니다....)

얘들아!! 내가 Name.jpgname.jpg 로 바꿨거든? 근데 Git 이 못알아 먹는거야!
그래서 나 삭제하고 푸쉬하고 또 생성하고 푸쉬했다!!?
왜 이런거지!!? 대소문자 구별 방법 이 따로 있어!!? 그럼 좀 알려줘!

1번 대답!

git mv -f OldFileNameCase newfilenamecase

써서 바꿔..

2번 대답!

git config core.ignorecase false

git에 설정 있어 이거 손대봐.

core.ignoreCase
Internal variable which enables various workarounds to enable Git to work better on filesystems that are not case sensitive, like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing finds "makefile" when Git expects "Makefile", Git will assume it is really the same file, and continue to remember it as "Makefile".

The default is false, except git-clone(1) or git-init(1) will probe and set core.ignoreCase true if appropriate when the repository is created.

Git relies on the proper configuration of this variable for your operating and file system. Modifying this value may result in unexpected behavior.

발췌 https://gitirc.eu/git-config.html

결론!

저는 경로를 수정하여 완료하였지만,
git config 를 수정하고, 앞으로는 git mv 로만 바꿀 생각입니다. ㅠ
혹시 이런 경험을 겪으시는분께 조금이라도 도움이 되길 바라며 글을 마칩니다.