Windows에서 파일의 대소 문자를 변경 하시겠습니까?


209

git-controlled codebase에는 두 개의 파일이 있는데 이름을 바꾸고 싶습니다. 특히, 나는 파일의 대소 문자를 변경하고 싶습니다.sourceCode.java 된다 SourceCode.java예를 들어. 캐치 : 나는 Windows 상자에 있고 파일 시스템은 그것들이 동일한 파일 이름이라고 생각합니다.

Windows와 Git이 변경 사항을 인식하고 체크인하도록하려면 어떻게해야합니까?


3
Git 2.0.1 이상 (2014 년 6 월)부터 간단한 기능 git mv이 작동합니다 ( stackoverflow.com/a/24979063/6309 ). 심지어 Windows에서도.
VonC

답변:


337

그것을하는 방법에 대한 더 많은 힌트를 보려면 여기를보십시오 :

git이 변경 사항을 무시하도록 만드는 방법은 무엇입니까?

또는:

git mv -f name.java Name.java

8
제쳐두고 이것은 FAT 파일 시스템에서 작동하지 않습니다. 나는 엄지 드라이브에 프로젝트 코드를 가지고 다니며 사례 변경은 정말 고통 스럽다.
asm

1
이것은 NTFS 시스템과 Windows 10에서 작동하지 않았습니다
Roboblob

1
이것은 올바른 올바른 방법이지만 많은 파일의 이름을 바꾸려면 지루할 수 있습니다. 파일 시스템에서 이미 이름이 바뀌었고 변경 사항을 커밋하려는 경우 일부 상위 폴더의 이름을 바꾸고 git add새로 이름이 바뀐 폴더를 수행하고 커밋하지 말고 폴더 이름을 원래대로 변경하십시오. , git add그것은 다시 다음 커밋합니다.
Okonomiyaki3000

NTFS 및 Windows 7에서 작동합니다.
Hans Goldman

이 작업을 일괄 적으로 수행 할 수 있습니까? 예 : powershell 사용Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
killjoy

49

FAT 파일 시스템을 사용하는 경우 유일한 선택은 2 단계 이름 바꾸기입니다.

  1. 이름 바꾸기 sourceCode.javaanything.you.like
  2. 이름 바꾸기 anything.you.likeSourceCode.java

우리가 Perforce를 사용하던 시절에는 정확히이 문제가 있었으며 이것이 우리가 해결할 수있는 유일한 솔루션이었습니다.


13
다른 사람들을위한 참고 사항 : 중간에 커밋 할 필요는 없지만 git이 변경 사항을 알 수 있도록 인덱스에 추가해야합니다.
arberg

29

다음 단계를 통해 Windows에서 사례를 변경할 수있었습니다.

  • 추가 ignorecase = false[core].git/config;
  • 이름을 바꾸려는 파일을 프로젝트 디렉토리 밖으로 옮기십시오.
  • 삭제를 색인에 추가하십시오.
  • 모든 파일을 원래 위치로 다시 옮기고 파일 및 / 또는 디렉토리의 대소 문자를 변경하십시오.
  • 모든 "새"파일을 색인에 추가하십시오.
  • ignorecase = false첫 번째 단계에서 추가를 제거하십시오 .

이 방법으로 이름 바꾸기가 포함 된 단일 커밋이 있으며 전체 디렉토리와 같이 쉽게 변경할 수 있습니다.


5
목욕 글로벌 및 로컬 설정을 위해 그것을 수행 : $ gti config --global core.ignorecase false $ gti config core.ignorecase false
Roman Ivanov

6

조심해. 이렇게하면 병합 할 수없는 변경 사항이 발생할 수 있습니다. Git은 이전 대문자 이름과 새로운 소문자 이름이 같은 파일인지 아닌지를 결정할 수 없기 때문에 Windows에서 병합 할 때 혼란스러워합니다 (Git은 아니지만 파일 시스템을 위해). 병합하려면 병합하기 전에 파일을 삭제하는 것과 같은 수동 해결 방법을 수행해야합니다.

보다 이름은 같지만 대소 문자가 다른 파일의 Git rebase 문제

이 문제가 프로젝트에 틀에 얽매이지 않은 이름의 파일을 가지고있는 것보다 더 나쁘지 않은지 확실하지 않지만 많은 병합을 가진 많은 사용자가 결국 병합되어야하는지 아는 것이 가치가 있습니다.


여러 플랫폼을 개발할 때 문제가 발생하기 때문에 가능한 한 중간 규모에서 대규모 프로젝트의 이름없는 파일은 항상 피해야합니다. 때로는 Windows에서 개발하고 있지만 Linux 빌드를 수행해야하며 Windows에서 제대로 작동하는 포함은 Linux에서 빌드를 중단시킵니다.
Griffork

3

제 생각에는 간단한 방법이 하나 없습니다. 단일 파일, 특정 디렉토리 또는 전체 저장소에 대해이를 수행 할 수 있습니다.

git rm --cached <file name or directory>
git add <file name or directory>

하위 디렉토리에도 영향을 미치려면 다음 -r플래그 를 사용해야합니다 .

git rm -r --cached <directory>
git add <directory>

정말 가장 간단한 것입니다.
ranu

이것은 git에 의해 완전히 새로운 파일로 설정되어 있기 때문에 파일의 전체 기록을 잃습니다.
Alejandro

@Alejandro 당신이 말하는 것이 잘못되었습니다. 방금 테스트하여 git이 아무런 문제없이 이름 바꾸기를 인식했습니다. 다른 경우와 마찬가지로 파일은 색인에서 제거 / 새 파일로 표시되지만 커밋하는 동안 git notices에서 파일 이름이 변경되었음을 알립니다.
Nils-o-mat

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