디렉토리의 대문자를 변경했는데 Git이 찾지 못하는 것 같습니다.


139

Git 버전 제어를 받고있는 OS X Lion에서 프로젝트를 개발 중입니다. 나는이 소문자 디렉토리를 가지고 나중에 대문자를 사용했지만 (예 : emailaddresses => EmailAddresses) Git은 변경 사항을 인식하지 못하는 것 같습니다. 여전히 내가 git ls-files다른 명령을 실행할 때 디렉토리가 소문자라고 생각 합니다.

이것이 무해한가요, 아니면 Git이이 변화를 받아들이도록 다른 조치를 취해야합니까?



이로 인해 2 일 동안 혼란이 생겼습니다. 이제 알겠다. 이 질문에 대한 Thnx
Number945

답변:


199

대소 문자를 구분하지 않지만 HFS +를 사용하는 경우가 있습니다. 나는 보통 다음과 같이이 일을한다 :

$ git mv somename tmpname
$ git mv tmpname SomeName

1
이것은 내가 가진 것과 동일한 문제이며 이것이 내가하는 일입니다.
fernferret

3
Windows 용 Github 도구와 동일한 문제가있었습니다. 위의 해결책은 문제를 잘 해결합니다 .Windows 탐색기에서 임시 파일로 이름을 바꾼 다음 커밋 한 후 올바른 이름으로 최종 이름으로 바꿉니다.
Jason

9
또는 하나의 명령으로 수행하십시오 : git mv --force somename SomeName ( stackoverflow.com/a/16071375/217866에서 )
jackocnr

1
변경 사항이 원격 저장소에 반영 되려면 또한해야합니다 git push origin master. git이 원격 업데이트를 거부하면 더미 파일 (예 :)을 추가 touch stam하고 푸시 해야 할 수도 있습니다 . 이후에 스템을 삭제 한 후 다시 누릅니다.
Rahav

2
주목해야 할 것은 파일이 작동하는 폴더에 있어야한다는 것입니다. 처음에는 나에게 분명하지 않았고 repo의 루트에서 명령을 실행하려고했기 때문에 >>> 잘못된 소스, source = somename, destination = tmpname <<<을 계속 얻었습니다.
Parth Tamane

280

git에게 다음을 실행하여 사례를 고려하도록 지시 할 수 있습니다

git config core.ignorecase false


4
git mv --force 또는 다른 CL 스크립트를 사용하지 않고 파일 이름을 이미 변경했다면 정말 좋은 대답입니다. 감사합니다!
MeanMatt

4
이것은 특히 git mv가 200 개의 이름이 바뀐 파일을 수동으로 바꾸는 것처럼 느끼지 않았기 때문에 탁월한 대답입니다!
Adam Reis

1
이것이 최고의 답변이어야한다고 동의했습니다. 감사합니다.
HomerPlata

1
어떤 이유로 든 모든 파일을 복제했습니다. 이제 원본 버전과 대문자가 변경된 버전이 모두 있습니다.
Salatiel

1
@ Salatiel 이미 파일을 추적 할 때 중복되는 것 같습니다.
이기

36

Mac에서 대소 문자를 구분하는 방법

이는 Mac OS X이 사용자를 돕기 위해 대소 문자 보존 및 대소 문자 구분 기능을 구현하기 때문에 발생합니다.

다른 답변의 이중 이름 바꾸기 제안이 효과가 있지만 모범 사례 결과를 얻으려면 '--force'를 사용하는 것이 좋습니다.

$ git mv --force somename SomeName


참고 : 강제 옵션을 사용하지 않으면 git이 다음과 같이 바프합니다.

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

위의 예에서 git 명령은 실패하고 파일 시스템이나 git의 색인에서 파일이 변경되지 않습니다.


첫 번째 명령에 따라 fatal: not under version control.
2540625

치명적인 오류는 해당 위치에 GIT 저장소가 없음을 의미합니다. git명령은 GIT 리포지토리가있는 디렉토리에서만 작동합니다.
David Manpearl

그러나 나는 내 Git 저장소의 하위 디렉토리에 있었다. 결국, 나는 Taran의 답변 BTW 를 통해 그것을 해결했다 . 감사.
2540625


4

다음 단계는 문제 해결에 도움이되었습니다.

  1. 폴더 이름을 다음으로 변경하십시오 temp.

    mv Folder temp                  // It will rename your Folder to temp
    
  2. 준비 및 커밋 :

    git add .
    git commit -m "Temp"
    
  3. temp폴더를 원하는 이름으로 변경 하십시오.

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

완료-이제 푸시 할 수 있습니다.


1

git mv AAA aaa또는 을 수행하면 git mv -f AAA aaa작동하지 않으며 오류가 발생합니다fatal: renaming 'AAA' failed: Invalid argument .

때문에 AAA하고 aaa있는 ONE SAME 이동 대소 문자 구분 파일 시스템에서 폴더 / 파일 AAA에 대한 aaa수단 이동 AAAaaa/AAA .

그래서 당신은해야합니다

git mv AAA aaa.1
git mv aaa.1 aaa

도움이 되길 바랍니다.


1

그 이유는 LINUX 기반 OS 또는 macOS가 파일 / 폴더 이름의 대소 문자를 무시하기 때문입니다. 아래 단계에 따라이 문제를 해결해야합니다.

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"

0

이 솔루션들 중 어느 것도 나를 위해 일하지 않았습니다. SourceTree는 항상 내가 원하는 것과 다른 사례로 분기를 만들었습니다. 그래서 내가 해결 한 방법은 다음과 같습니다.

1-파인더에서 자식 파일을보십시오. 터미널에서 이것을 입력하면됩니다 :

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2-파인더를 다시 시작하고 프로젝트 디렉토리로 이동하십시오.

3-이제 폴더 이름을 변경하십시오. 기능에서 기능으로 말합니다. 그리고 당신은 간다.



0

나는 같은 문제가 있었고 아래 해결책을 사용했다. 나는 이것을 배치, 디렉토리 및 파일 이름 바꾸기 등에 사용합니다.

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

여기에 자세히 설명되어 있습니다.


0

이 중 어느 것도 실제로 도움이되지 않았습니다. 내 로컬 폴더가 대문자이지만 원격이 아니고 지점이 뒤에 있었고 파일 대소 문자 차이로 인해 더 이상 가져올 수 없기 때문에 내 변경 사항을 숨기라고 git에게 계속 알려주었습니다. 폴더 구조에서.

이 문제를 해결할 수있는 유일한 방법은 로컬 지점을 삭제하고 원격을 확인하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.