suyeonme
[Git] 파일의 대소문자 변경시, 반영안되는 경우 해결하기 본문
코드를 작성하다가 폴더 이름에 대소문자 철자 오류가 있는 것을 발견하였다. 따라서 폴더명을 올바르게 고치고 변경 내용을 push하였다. 변경 사항을 반영하기 위하여, 젠킨스 빌드잡을 돌렸는데 빌드잡이 실패하였다. 하지만 내 로컬 환경에서는 정상적으로 작동하였다.
젠킨스 빌드 실패
젠킨스 빌드 실패 로그는 아래와 같았다. 내가 변경한 모듈의 경로를 찾지 못해서 Module not found 에러가 발생한 것이였다. 확인해보니 해당 모듈을 import하는 경로에는 문제가 없었다.
젠킨스 빌드 실패 원인
알고보니 원인은, vscode에서 직접 폴더 이름의 대소문자를 변경한 탓이였다. 나의 로컬 환경에는 변경사항이 적용이 되었지만, 해당 변경사항을 push했을 때, 원격 저장소에 있는 폴더명과 나의 로컬 환경의 폴더명이 일치하지 않는다. 따라서 내 환경에서는 문제가 없었지만, CI 빌드가 실패한 것이였다.
Git은 파일/폴더의 대소문자 변경을 반영하지 않는다.
Git은 운영체제의 파일 시스템에 의존한다. 따라서 내가 사용하는 맥 OS의 경우, 파일명의 대소문자가 달라도 파일 시스템은 파일을 동일하게 인식힌다.
해결 방법
git mv 명령어를 사용하여 파일명을 변경한다. 명령어는 변경할 폴더/파일이 있는 디렉토리에서 입력해야한다.
해당 명령어를 사용하여 파일명을 변경할 경우, 파일을 삭제하고 다시 올린 것처럼 변경 사항이 추적이 된다. 따라서 파일/폴더의 대소문자 변경또한 반영이 된다.
아래처럼 git mv 명령어를 사용하여 파일명을 변경한 후, 변경 사항을 커밋하고 원격 저장소에 push하면 해결된다.
git mv LogSInk LogSink
만약 명령어 입력시, 아래와 같은 에러가 발생한다면, 터미널로 가서 현재 위치가 변경할 폴더/파일인지 경로를 확인해보자.
fatal: bad source, source=LogSInk.tsx destination=LogSink.tsx
주의 사항
git config의 옵션을 변경하여 통해서 해결할 수도 있지만 협업중이라면, 사용하지 말자.
아래와 같이 옵션 적용을 하면, 동료 개발자도 모두 해당 옵션으로 변경해야하며, 변경한 이름으로 새 폴더가 생겨서 작업한 내용(git history)이 사라질 위험성이 있다.
git config core.ignorecase false
'프로그래밍👩🏻💻 > Git' 카테고리의 다른 글
[Git] 모노레포 환경에서 Husky로 Git Hook 설정하기(Commit전 console.log 제거) (0) | 2024.05.16 |
---|---|
[Git] 모노레포 환경에서 Husky로 Git Hook 설정하기(commitlint) (0) | 2024.05.16 |
[Git] 모노레포 환경에서 Husky로 Git Hook 설정하기(lint-staged) (0) | 2024.05.06 |
[Git] Tag 명령어 정리 (0) | 2022.10.18 |
[Git] multi line으로 커밋 메세지 작성하기 (0) | 2022.07.02 |