git은 대소 문자를 구분하지 않습니까?


96

내 부분의 첫 번째 약속 _Electronics에서 대문자로 시작하여 썼다가 _electronics.

cygwin 아래의 Git은 새 이름을 커밋 한 후 케이스를 무시 했으므로 대상 저장소에서 이름을 직접 변경했습니다.

이제는 커밋 된 _electronics부분을 _Electronics.

내가 뭘 잘못 했어?


9
어떤 OS를 사용하고 있습니까?
Keith Thompson

10
어떤 파일 시스템을 사용하고 있습니까?
Andrew Marshall

cygwin이있는 Windows. 내 서버는 Ubuntu Linux를 실행합니다. 파일 시스템을 모릅니다. ext3 또는 ext2-내 공급자가 최소 설치를 구성했습니다.
JAkk 2011

Windows가 대소 문자를 구분하지 않기로 결정한 것이 기쁘지 않습니까?
Cascabel

4
Windows는 대소 문자를 구분하지 않지만 때때로 (오늘날 더 자주) 대소 문자를 유지 합니다.
Arafangion 2012

답변:


73

두 가지 다른 것으로 보이지만 대소 문자를 구분하지 않는 시스템에서 문제가 발생합니다. 이 경우 경로 또는 파일 이름을 탭으로 완성하고 있는지 확인하십시오. 또한 경우에 따라 이름을 변경하려면 다음을 수행하십시오.

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

이것은 커밋을 변경 한 다음 커밋을 축소하는 명시적인 방법입니다. 이를 수행하는 더 짧은 방법은 색인과 작업 폴더를 모두 하나로 조작하는 것입니다.

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

이것은 디렉토리 이름을 조정하는 것과도 관련이 있습니다 : git mv 및 디렉토리의 대소 문자 만 변경


이것이 옳은 것 같습니다 (대문자에서
다운 케이스

저는 cygwin에
익숙해 져

당신은 할 수 있습니다 git mv file.txt File.txt. 이것이 새로운 git 기능인지 확실하지 않습니다.

107

core.ignorecase구성 값 에 따라 달라지며 대소 문자를 구분하는 파일 시스템에서는 false로 설정되고 Windows에서는 msysgit에서 true로 설정됩니다.

core.ignorecase

true 인 경우이 옵션을 사용하면 FAT와 같이 대소 문자를 구분하지 않는 파일 시스템에서 git이 더 잘 작동하도록 다양한 해결 방법을 사용할 수 있습니다. 예를 들어, git이 "Makefile"을 예상 할 때 디렉토리 목록에서 "makefile"을 찾으면 git은이 파일이 실제로 동일한 파일이라고 가정하고 "Makefile"로 계속 기억합니다.

기본값은 false입니다. 단, 저장소가 생성 될 때 git-clone (1) 또는 git-init (1)이 적절한 경우 core.ignorecase true를 조사하고 설정합니다.

이 답글에 대한 자세한 내용은 Git에서 파일 이름의 대문자 변경 에 대한 답변 입니다.


79
이것은 정답입니다. 미래를 위해 git config --unset-all core.ignorecase && git config --system core.ignorecase falsesudo와 함께 사용하십시오 .
Znarkus

2
James도 마찬가지입니다. @Znarkus는 OS X에서이 문제에 대한 수정 사항을 확인했습니다. 감사합니다!
Craig Nakamoto 2012 년

1
@Znarkus는 Windows에서도 작동합니다. 아름다운.
orlade

9
@Znarkus, OSX에서 그렇게 할 때의 문제는 파인더를 통해 파일 이름을 바꾸고 대소 문자 만 변경하면 git은 이름이 바뀐 버전을 완전히 새로운 파일로 볼 수 있지만 해당 "삭제"를 생성하지 않는다는 것입니다. 이전 버전의 파일에 대한 작업입니다. 따라서 커밋하고 github에 푸시하면 github는 이전 이름과 새로 이름이 지정된 파일을 모두 가지지 만 로컬 시스템에는 새 파일이 있고 git은 더 현명하지 않습니다.
ivanreese

2
@spiralganglion OSX의 웹 개발자 의 경우 대소 문자 구분 파티션 을 만든 다음 www 디렉토리로 마운트 하는 것이 좋습니다 .
Znarkus

23

이것은 훨씬 쉽습니다.

git mv Electronics electronics -f
git commit -m "That was easy!"

1
대소 문자를 구분하지 않는 파일 시스템에서 이것을 시도 했습니까?
Edward Thomson

1
나는 처음에 이것을 파일이 아닌 폴더의 대소 문자 변경 이름 바꾸기를 수행하려는 원본 포스터로 읽었습니다. 이제 다시 읽었으므로 불분명합니다. 실제로 mv -f파일에 대해 작동합니다.
Edward Thomson

21
git config --system core.ignorecase false

0

내 시나리오에서 나는 두 개의 폴더를 가지고 tests하고 Tests있는 두 Github에서의 별도의 폴더하지만 단일로했다 Tests윈도우에서 폴더. 내 목표는 둘 다 tests.

다음 접근 방식을 사용했습니다.

  1. 새 폴더 생성 temp
  2. 모든 콘텐츠를에서 Tests로 복사temp
  3. 지우다 Tests
  4. 실행하다 git rm Tests -r
  5. 이름 바꾸기 temptests

0

이 문제를 해결하려고 시도했으며 Windows10에서 성공했습니다.

bitbucket TEST 및 test에 두 개의 폴더가 있다고 가정하지만 디스크에 repo를 복제하면 TEST 만 생성되고 모든 파일이 포함 된 git의 단일 폴더로 test를 유지하고 싶습니다.

명령 줄에서 다음 명령을 실행해야합니다. git mv TEST test1 -f git mv text1 test -f git commit -m "renaming ..."git push

이제 폴더 계층 구조가 bitbucket에서 수정 된 것을 볼 수 있습니다.

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