본문 바로가기

[Git & Collaboration]

[git] Mac-VSC에서 Git이 파일명 대소문자 변경을 인식하지 않는 문제 해결 방법

🔥 문제 상황: Mac에서 파일명을 변경했는데 Git이 감지하지 못하는 문제

❌ 예상과 다르게 Git이 변경 사항을 감지하지 않는 경우 

Mac에서는 components/header.js 파일을 components/Header.js로 변경해도 Git이 이를 인식하지 않는 문제가 발생할 수 있습니다.
예를 들어, 아래와 같이 파일명을 변경했다고 가정해 봅시다.

mv components/header.js components/Header.js

변경되었을 거라고 생각했지만...

git status

 
🚨 Git에서는 변경 사항이 없다고 나옴!

작업 트리가 깨끗합니다.

또는 Webpack에서 다음과 같은 오류가 발생할 수도 있습니다.

ERROR in ./src/components/Header.js
Module not found: Error: Can't resolve './components/Header.js'

💡 왜 이런 문제가 발생할까?

  • Mac의 기본 파일 시스템(APFS, HFS+)은 대소문자를 구별하지 않는(case-insensitive) 방식으로 작동합니다.
  • 즉, header.js와 Header.js를 같은 파일로 인식하기 때문에 Git이 이를 감지하지 못합니다.
  • Webpack이나 Node.js도 같은 이유로 캐싱이 꼬이거나 모듈을 찾지 못하는 문제가 발생할 수 있습니다.

🚀 해결 방법: Mac에서 Git이 대소문자 변경을 감지하도록 만들기

Mac에서 파일명을 대소문자로 변경할 때는 반드시 중간 이름을 거쳐 변경해야 합니다.
아래 방법을 순서대로 따라 하면 문제없이 변경할 수 있습니다.


1. 중간 이름을 사용하여 파일명 변경

단순히 header.js → Header.js로 변경하면 인식되지 않기 때문에, 중간에 임시 이름을 거쳐야 합니다.

mv components/header.js components/header_temp.js
mv components/header_temp.js components/Header.js

이제 Git이 변경 사항을 감지할 수 있습니다.
 

 2. Git에서 강제적으로 파일명 변경 적용

이제 Git에서도 파일명이 변경되었음을 인식하도록 강제 적용해야 합니다.

git mv components/header.js components/header_temp.js
git mv components/header_temp.js components/Header.js
git commit -m "Rename header.js to Header.js"

이제 Git이 변경 사항을 감지하고 커밋됩니다.

 

3. Webpack과 Node.js의 캐시 삭제 후 재실행 (React 프로젝트의 경우)

Mac에서는 Webpack이나 Node.js의 캐시가 남아 있어서 경로가 꼬이는 경우가 많습니다.
따라서 대소문자 변경 후에는 캐시를 삭제하고 프로젝트를 재실행하는 것이 좋습니다.

rm -rf node_modules/.cache
rm -rf dist
npm start

 

 

💡 추가 해결 방법: Git에서 대소문자 변경을 항상 감지하도록 설정

Git의 설정을 변경하여 대소문자 변경을 항상 감지하도록 설정할 수도 있습니다.

git config core.ignorecase false

이렇게 설정하면, Git이 Mac에서도 파일명의 대소문자 변경을 인식할 수 있습니다.
다만, 이 방법은 프로젝트 단위에서 설정해야 하고, 협업 시 팀원들도 동일하게 설정해야 합니다.


Mac에서 대소문자 변경 시 꼭 기억해야 할 점

1️⃣ Mac에서는 기본적으로 파일 대소문자를 구별하지 않음
2️⃣ 파일명을 바꿀 때는 mv header.js header_temp.js && mv header_temp.js Header.js 방식으로 변경해야 함
3️⃣ Git에서는 반드시 git mv를 사용해야 변경을 감지할 수 있음
4️⃣ Webpack, Node.js 등 캐시가 남아 있다면 삭제 후 재실행해야 정상 작동
5️⃣ Git 설정에서 core.ignorecase=false를 사용하면 대소문자 변경을 감지할 수 있음


📝 참고자료