바쁘신 분들을 위해 결론부터

git으로 관리되는 프로젝트 디렉터리에서 파일이름의 대소문자만 변경하고 싶을 때는 탐색기에서든지 혹은 쉘에서든지 임의로 파일 이름을 바꾸지 마시고, 아래와 같이 git 명령을 사용해서 변경합니다.

# user.ts 파일을 User.ts 파일로 변경하는 예

$ git mv uesr.ts User.ts

그러면 파일을 삭제하고 다시 올린 것처럼 변경이력 추적이 됩니다.

git의 파일 변경 인식

버전 관리 시스템 git은 파일 내용의 라인별로 변경 내용을 관리합니다.

그래서 파일을 수정하면 몇 줄을 추가했는지, 몇 줄을 제거했는지가 표시됩니다.

그런데 파일 이름의 대소문자만 변경하면 어떻게 될까요?

탐색기에서 임의로 파일 이름의 대소문자만 변경하면?

git은 운영체제의 파일시스템에 의존합니다.

Windows나 macOS의 파일 시스템에서는 파일 이름의 대소문자가 달라도 같은 파일로 인식합니다.

그래서 여러분이 파일 이름의 대소문자를 수정해도 스테이지(변경 내용을 commit하기 위해 대기하는 상태)에 변경이 나타나지 않습니다.

이 상태로 commit, 혹은 push를 한다면 다른 사용자들이 코드를 pull했을 때 여러분의 로컬 저장소의 파일 이름과 다르게 됩니다.

내 자리에서는 잘 되는데 다른 개발자들 자리에서는 안 되거나, CI 빌드가 실패할 수 있습니다.

git mv

git 2.21.0 이전에는 git mv 명령에 --force를 붙여야 했습니다.

# user.ts 파일을 User.ts로

$ git mv --force user.ts User.ts

그런데 이제는 --force 옵션을 안 붙여도 이런 상황을 git에서 자동으로 인식하고 처리해줍니다.1

그래서 이제는 아래와 같이 하시면 됩니다.

# user.ts 파일을 User.ts로

$ git mv user.ts User.ts

References