루밀LuMir's GitHub profile image
PLAY KEYBOARD, STRIKE A CODE🎨

Git에서 파일 혹은 디렉토리의 대ㆍ소문자를 구분하는 방법

파일 myComponent.jsxMyComponent.jsx로 변경하는 경우, 디렉토리 Srcsrc로 변경하는 경우 등, '대ㆍ소문자만 변경된 파일 혹은 디렉토리'가 정상 추적되지 않는 경우가 존재한다.

Git은 기본적으로 대ㆍ소문자를 구분하지 않기에, 운영체제에서 제공하는 이름 바꾸기 기능을 통해 파일 혹은 디렉토리명을 바꾸어도 Git에는 적용되지 않는 것이다.

위 문제의 해결 방안은 아래와 같다.

1. 방법 1

# 대소문자 구분 O
git config core.ignorecase false

# 대소문자 구분 X
git config core.ignorecase true

git config core.ignorecase false 명령어를 통해 Git에 대ㆍ소문자를 구분하도록 명령하면, 변경된 파일명이 정상 추적된다. 하지만, 아래와 같은 단점들로 인해 방법 2를 이용할 것을 권장한다.

1-1. 단점 1

위 방식을 통해 대ㆍ소문자를 구분하게 되어 해당 내용을 push 하더라도, 팀원의 Git이 대ㆍ소문자를 구분하지 못한다면 그들에게는 pull되지 않는다. 결국, 나에게 더이상 발생하지 않는 오류가 팀원에게는 여전히 남아있는 것이다.

따라서, 해당 옵션은 팀 작업시 함부로 사용해서는 안되며, 불가피할 경우 팀원에게 설정을 공유해야한다.

1-2. 단점 2

위 방식을 통해 디렉토리 Srcsrc로 이름 변경한 후 Git에 push하더라도, 여전히 Src 디렉토리는 삭제되지 않고 남아있는 채로 src 디렉토리가 새로 추가된다. 즉, Srcsrc 디렉토리가 모두 존재하는 상황이 발생하는 것이다.

2. 방법 2

git mv oldName newName

파일 혹은 디렉토리명을 변경하여 Git에 적용하고 싶을 때, 위 명령어를 이용한다. 기존 파일 혹은 디렉토리명을 앞에 입력하고, 뒤에 새 이름을 입력한다.

단, 이름 전체를 변경하지 않고 대ㆍ소문자만 변경하였을 경우에는, 아래와 같은 두 단계를 거쳐 이름을 바꿔야만 오류가 발생하지 않는다. 즉, oldName에서 newName으로 직접 이름 변경을 시도하지 말고, 임시 폴더 이름(temp)을 거쳐 변경해야 한다.

git mv oldName temp
git mv temp newName

Reference