D.evelop/Git

[Git/Github/vscode]파일명 수정 후 push시 반영 안되는 현상

Danne 2021. 10. 23. 23:47

이번에 만난 문제.

github에 push시 '변경된 파일명'이 반영되지 않는 현상.

 

과정 

1.  내 브랜치에서 한 파일명을 변경함 (camel case에서 pascal case로 변경)

navData.js파일을 NavData.js 파일로 변경.

2. 작업 이어 진행.

3. push함. 

(깃헙에 PR하고 템플릿 적음. changed에서 변경, 추가된 코드는 살폈지만 변경된 파일명이 적용됐는지 확인 안함. 확인할 생각도 못함)

4. master브랜치에 merge된 것을 확인.

5. master 브랜치로 이동후 git pull origin master로 mater 상태를 업데이트함.

6. 업데이트한 프로젝트에 경로 오류가 있어 확인.

navData를 호출했던 코드에서는 NavData로 수정한 것이 반영되었는데, 파일명은 수정한 것이 반영 안됨. navData.js로 돌아가있음.

 

내가 수정을 재대로 안했나?하고 무시하고 수정해서 다시 진행.

이때 '내가 마지막까지 출력되는 화면을 잘 확인했는데, 왜 변경사항이 누락 되었는지' 의심을 했어야함.

 

7. 그 후 수정과 피드백 사항을 반영하여 이어 진행. 

(중간에 branch이름을 바꿨는데, pr이 새로 생성되는 등 다양한 이슈가 있었고 프로젝트에 문제가 없는 방향으로 작업을 이어나감)

 

8. 다른 팀원들의 작업이 merge가 되면 mater에서 pull을 받아와 내 작업 브랜치에 merge해가며 계속 진행.

 

9. 내 작업 push함.

10. master 브랜치로 이동후 git pull origin master로 mater 상태를 업데이트함.

11. 프로젝트를 실행하니 또 경로 오류.

12. github repository를 보면 또 camel case로 navData.js라고 되어있음. (=파일명 수정 사항 적용 안됨)

13. 또 '내가 파일명을 되돌려서 올렸나?'하고 다시 수정해서 올림.

해당 부분은 이렇게 pr까지 따로 생성해서 올려 Merge 됨.

이젠 됐겠거니...

 

14. 그러나 다음 날.🤯

작업 브랜치가 merge되면서 나만 감당하면 될 것같은 오류가 팀원을 괴롭히고 있었다.

 

15. 우선 팀원이 작업을 이어나갈 수 있도록 파일 경로와 변경할 이름을 전달.🙏🙏

 

이 상황이 지속되면 안된다는 생각이 들었다.

 

16. 상황판단을 위해 폭풍 확인.

여전히 navData.js라는 카멜케이스로 repository에 존재하는 파일과

그와 다른 이름이지만 더 더이상 업데이트할 게 없다고 말하는 mater브랜치.

혹시 실수로 master에서 수정을 했나? 생각했지만

없다고...

 


해결 시도

✔️ 원인 찾기

1. git 명령어를 사용한 이름 변경

OS에서 제공하는 이름 바꾸기 기능을 이용하면 폴더명이나 파일명을 바꾸어도 git에 변경사항이 적용되지 않는다.

고한다. (프로규 블로그)

git으로 관리하는 폴더는 git에 적용하고 싶다면 git명령어를 사용해줘야함.

 

 

❓걸리는 점

- 작업 중에는 거의 vscode를 통해 이름을 바꿔왔다. 왜 이때까지 누락없이 반영되어져 왔을까? 운이 좋았던 걸까?

vscode 환경 하에서 파일 이름을 변경.
그냥 단순히 파일이름을 변경하면 git에서 삭제 및 추가 작업을 수행 > git추적을 잃어버리게 됨
파일 기록을 보존하는 git mv를 수행해야함.

출처 : microsoft Visual Studio forum (링크 - 2017년 글이지만 2021년까지 아우성이 이어지고있다.)

 

 

:: 폴더명 변경 git 명령어

git mv oldName newName

 

 

🤔❓ 같은 이름으로 변경하면 변경이 더 완벽하게 먹히지 않을까? - 안됨

➜  Nav git:(feature/main) git mv NavData.js NavData.js
fatal: 디렉터리를 자기 자신으로 옮길 수 없습니다, 원본=src/components/Header/Nav/NavData.js, 대상=src/components/Header/Nav/NavData.js

 

🤔❓ 그럼 다른 이름으로 살짝 변경했다가 원하는 이름으로 다시 변경해보자. - 안됨

➜  Nav git:(feature/main) git mv NavData.js NavData2.js
fatal: 버전 컨트롤 중이 아닙니다, 원본=src/components/Header/Nav/NavData.js, 대상=src/components/Header/Nav/NavData2.js

버전 컨트롤이 안된다고?

> 구글 검색 : 유사한 결과가 없다.

 

 

🤔❓ 숫자때문일까? - 아님

fatal = 치명적이다.

버전 컨트롤 = git이 버전 컨트롤하려고 만든거 아닌지...

그게 안된다는게 뭐하자는 말인지.🥲

 

 

 

 

 

2. 기존 remote 제거 후 다시 추가

나의 remote에 문제가 생긴 걸까?

변함이 없네?

 

 

 

 

 

3. git 대소문자 구별시키기 ✨✨✨✨✨

 

문득 스쳐간 문구가 떠올랐다.

"git 명령어로 파일 이름 바꾸기"에 참고했던 프로규님의 포스팅에서 git은 대소문자를 구문하지 않는다는 말!

그리고 다시 폭풍서치 중 나와 비슷하고 유사한 사례 발견!

[딸바보아재 개발기] git 은 폴더/파일명의 대소문자를 개무시한다. 그럼 우째?

이번엔 뭔가 예감이 좋았고, 나는 내 예감을 썩 믿지 못하겠다 이제..

  • camel case에서 pascal case로 변경함 = 대소문자 변경
  • push 했는데 반영 안됨.
// 대소문자 구분함
git config core.ignorecase false
// 대소문자 구분 안함
git config core.ignorecase true

대소문자를 구분하겠다는 명령을 하는 순간!!!

그린라이트를 뿜어내는 파일!! changes에 뜬다!!!!

 

진짜 push....

 

pr 후 File changed 확인 ( 완벽👍 )

끝!

 

 

+추가

나의 git 이 대소문자를 구분하게 되어 해당 내용을 push하게 된다고 하더라도, 팀원의 git이 대소문자를 구분하지 않으면 그들에게 pull되지 않는다.

나에겐 더이상 일어나지 않는 오류가 팀원에게는 계속 남아있게 된다.

고로 이 옵션을 공용 git작업시 이 옵션은 함부로 사용해선 안되며, 사용해야한다면 팀원들에게 공유해야한다.

 

 


 

 

 

정말이지 예상치 못한 상황이 너무 많이 일어나는 git.

 

git 문제로 멘토님들을 제일 많이 찾아가게 된 한 주가 아닌가 싶다.

 

왜 문제가 일어났는지 모르니, 뭘 찾아봐야할지도 모르겠는 상황.

내가 수준에서 할 수 있는 최선의 용어와 문장으로 상황과 목표에 대한 설명을 시도해도 "왜"를 설명하지 못하면 결국 답을 구할 수 없다는 것.

수준을 높여야 질문다운 질문을 할 수 있고, 답도 찾을 수 있다.

 

그래도 '지금 많이 경험하는게 어디야?'하는 긍정회로를 돌려본다.

 

빨리 원인을 찾고야 말겠다.

 

 


 

 

찾았다!

거의 4시간 가량을 붙들어 해결한 만큼 너.무.행.복

 

작다고 생각한 개념이 큰 파장을 불러올 수 있음을 새삼 느꼈다.

git이 대소문자를 인식하지 않는 것을 '그렇구나'정도로 넘겼다가, 팀원들의 작업 시간에 지장을 주게 됐다.

 

해결하고 보니 해결책을 좁혀갈 수 있는 키가 많았었다.

  • PR 후 코드 변경사항과 동시에 파일명을 수정한 부분이 반영되었는지 확인했더라면 좀 더 빨리 수정의 필요성을 인지했을 것이다.
  • git status나 git add .시 보여지는 리스트에서 '해당 파일이 스태이징 되지 않고 있다'는 것을 빨리 알았으면, "왜 push가 안되지?"가아니라 "왜 변경사항을 인식하지 않지"라는 방향으로 빨리 접근했을 것이다.

결국 1 > 2 > 3 > 4 이렇게 진행되는 flow를 따라가기에만 급급했던 것.

1이 어떤 조건을 만족해야 2에 도달하는지, 4까지 도달하지 못했을 땐, 3의 어떤 부분을 바라봐야하는지에 대한 이해도가 부족했다.

 

반응형