Git에서 파일 이름의 대문자 변경


473

이전과 다른 대문자를 사용하도록 파일 이름을 바꾸려고합니다.

git mv src/collision/b2AABB.js src/collision/B2AABB.js
fatal: destination exists, source=src/collision/b2AABB.js, destination=src/collision/B2AABB.js

보시다시피, Git은 이에 적합합니다. 나는 평범한 이전 mv명령을 사용하여 이름을 바꾸려고 했지만 Git은 이름 바꾸기 또는 이름 이없는 새로운 파일로 이름 바꾸기를 선택하지 않습니다 .

같은 이름의 다른 대문자를 사용하도록 파일을 어떻게 변경합니까? Z 쉘 (zsh) 4.3.15를 사용하여 Git 1.7.9.1이 설치된 Mac OS X v10.7.3 (Lion)을 사용하고 있습니다.


49
osx 파일 시스템은 대소 문자를 유지하며 기본적으로 대소 문자를 구분하지 않기 때문입니다. 두 단계 만 거치면됩니다.git mv myfile foo; git mv foo MyFile
tonio

16
"git mv --force myfile MyFile"로 작업했습니다.
Marcello de Sales


7
git 2.0.1 (2014 년 6 월)을 시작 git mv hello.txt Hello.txt하면 대소 문자를 구분하지 않는 OS에서 작동합니다. 아래 내 답변
VonC

답변:


554

Git 2.0.1 (2014 년 6 월 25 일)부터는 git mv대소 문자를 구분하지 않는 OS에서만 작동합니다 .

참조 baa37bf 커밋 에 의해 데이비드 터너 ( dturner-tw) .

mv: 대소 문자를 구분하지 않는 파일 시스템에서 이름을 바꾸어 대소 문자를 수정하도록 허용

git mv hello.txt Hello.txt대소 문자를 구분하지 않는 파일 시스템에서 " "는 항상 " destination already exists"오류를 발생 시킵니다. 이 두 이름은 파일 시스템의 관점에서 동일한 경로를 참조 --force하며 색인 및 다음 커밋.

이 사례를 감지하고 " --force" 이 없어도 됩니다.

git mv hello.txt Hello.txt그냥 작동합니다 (더 --force이상 필요하지 않음).


다른 대안은 다음과 같습니다.

git config --global core.ignorecase false

파일 이름을 직접 바꾸십시오. 자식 추가 및 커밋.


2
그러나 이것은 회귀했거나 Windows에서 작동하지 않았습니다. 여전히 2.15.1.windows.2과에 오전 --force를 사용할 필요가
TTimo

1
@Adowrath 좋은 소식!
VonC

파일 이름 image.TXT을 가지고있는 경우 확장 총액이 작품은 또한 예를 들어, 나는 image.txt처럼 이름을 바꿀 것인가
siluveru 키란 쿠마르

@siluverukirankumar 네. 해당 사용 사례에 문제가 있습니까?
VonC 2016 년

1
이 명령을 실행하여 창에서 작동하도록하고git config core.ignorecase false
John Targaryen

452

larsks의 답변을 고려 하면 "--force"를 사용하여 단일 명령으로 작업 할 수 있습니다.

 git mv --force myfile MyFile

3
대소 문자를 구분하지 않는 파일 시스템을 사용하고 치명적인 오류 "잘못된 인수"가 표시되면 대신 다음 단계를 수행하십시오. stackoverflow.com/questions/3011625/…
Levi

1
이것이 첫 번째 단계에 대한 정답이지만 다른 지점에 오래된 대문자가있을 때 Mac OS X에서 다른 지점으로 전환하는 방법은 무엇입니까? **** 오류 발생 : 다음 추적되지 않은 작업 트리 파일을 체크 아웃으로 덮어 씁니다. ****
TJChambers

1
이것은 Windows에서 나를 위해 커밋에 실패했습니다.Error: Will not add file alias 'MyFile' ('myfile' already exists in index)
OrangeDog

98

때로는 대소 문자를 구분하지 않는 파일 시스템 (예 : OS X 또는 Windows)에서 많은 파일 이름의 대문자를 변경하려고합니다. git mv명령을 수행하면 빨리 지칠 것입니다. 일을 조금 더 쉽게하기 위해 이것이 내가하는 일입니다.

  1. 디렉토리 외부의 모든 파일을 데스크탑으로 옮깁니다.
  2. 마십시오 git add . -A모든 파일을 제거합니다.
  3. 데스크탑의 모든 파일 이름을 대문자로 바꿉니다.
  4. 모든 파일을 원래 디렉토리로 다시 이동하십시오.
  5. 를 수행합니다 git add .. 힘 내야 파일 이름이 바뀐 것을 볼 수 있습니다.

이제 파일 이름 대문자를 변경했다는 커밋을 만들 수 있습니다.


3
이것은 당신이 들어오고 나가는 파일의 모든 역사를 희생하여 발생합니다. git mv --force 에이 단점이 없다고 생각합니다.
LOAS

12
아니요, 이렇게해도 모든 기록이 제거되지는 않습니다. 두 추가 사이에 커밋이 없습니다.
Michael L Perry

63

OS X의 파일 이름은 대소 문자를 구분하지 않습니다 (기본적으로). 이것은 Git 문제보다 OS 문제입니다. 파일을 제거하고 읽은 경우 원하는 것을 얻거나 다른 이름으로 바꾸고 다시 이름을 바꿔야합니다.


2
당신은 또한 수 있습니다 git clone리눅스 시스템에서의 repo는 파일 이름을 변경하고 (당신은 손에서 리눅스 시스템이있는 경우) 그냥이 상황을 커밋합니다.
gitaarik

4
실제로 OS X의 파일 시스템은 대소 문자를 구분할 수 있으므로 설치시 구성 할 수 있습니다. OS X 파티션이 대소 문자를 구분하는지 확인하는 방법
Flimm

2
... 답변에 "(기본적으로)"입니다.
Larsks

4
확인 git rm --cached fileorfolder하기 위해 파일 시스템에서 파일 또는 폴더를 제거하지 않고 git에서 파일 또는 폴더를 제거하는 데 사용할 수 있습니다 . 그런 다음을 사용하여 파일이나 폴더를 다시 추가 할 수 있습니다 git add fileorfolder.
kas

32

설정 ignorecasefalse자식 설정에

원래 게시물은 "Git에서 파일 이름의 대문자 변경"에 관한 것입니다.

프로젝트에서 파일 이름의 대문자를 변경하려는 경우 Git에서 파일 이름 을 강제로 바꿀 필요가 없습니다 . IMO, IDE / 편집기에서 대문자를 변경하고 이름 바꾸기를 선택하도록 Git을 올바르게 구성했는지 확인하십시오.

기본적으로 Git 템플릿은 대소 문자를 무시하도록 설정되어 있습니다 (Git 대소 문자 구분). 기본 템플릿이 있는지 확인하려면을 사용 --get하여 지정된 키의 값을 검색하십시오. 사용 --local--global로컬 힘내 저장소 구성 또는 글로벌 한에서 구성 키 - 값을 선택할지 여부를 힘내에 나타냅니다. 예를 들어, 글로벌 키를 조회하려는 경우 core.ignorecase:

git config --global --get core.ignorecase

이 반환되면 다음 true과 같이 설정하십시오.

git config --global core.ignorecase false

(글로벌을 변경할 수있는 적절한 권한이 있는지 확인하십시오.) 그리고 거기에 있습니다. 이제 Git 설치는 대문자를 무시하지 않고 변경으로 취급합니다.

제안으로, 다중 언어 프로젝트를 수행 중이고 모든 프로젝트가 Git에서 대소 문자를 구분하지 않는 것으로 생각되면 로컬 core.ignorecase파일을 업데이트 하십시오.


6
그리고 git config --global --get core.ignorecase아무것도 반환하지 않으면. 그게 true?? 내가 그것을 설정 한 후 falsefalse를 반환 하기 때문에 (Windows 10)
fralbo

그리고 예상대로 작동하지 않는 것 같습니다. 데스크톱 클라이언트가 변경 사항을 볼 수 있지만 커밋 / 동기화 후에도 파일 이름은 온라인에서 변경되지 않습니다!
fralbo

나를 위해 일했습니다 (그리고 여러 파일을 사용하는 것보다 낫습니다 git mv). 또한 기본적으로 그것이 참으로 간주된다고 가정합니다 (즉, 대소 문자를 무시하고 있습니다). 또는 OS의 정책과 파일 이름을 일치시킵니다.
Jerry

그게 답입니다. 방금 사용했습니다.
Dave Everitt

1
이것은 정답입니다
Dave Everitt

7

".git"디렉토리를 연 다음 "config"파일을 편집 할 수 있습니다. "[core]"설정에서 "ignorecase = true"로 설정하면 완료됩니다.;)


git이 대소 문자를 구분하도록 false로 변경 해야하는 것 같습니다.
조나단

1

git mvmacOS에서 파일을 소문자로 벌크하려면 :

for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done

폴더의 모든 파일을 소문자로 사용합니다.


1

이 Python 스 니펫은 git mv --force디렉토리의 모든 파일이 소문자가되도록합니다. 예를 들어 foo / Bar.js는를 통해 foo / bar.js가됩니다 git mv foo/Bar.js foo/bar.js --force.

원하는대로 수정하십시오. 방금 공유 할 것이라고 생각했습니다. :)

import os
import re

searchDir = 'c:/someRepo'
exclude = ['.git', 'node_modules','bin']
os.chdir(searchDir)

for root, dirs, files in os.walk(searchDir):
    dirs[:] = [d for d in dirs if d not in exclude]
    for f in files:
        if re.match(r'[A-Z]', f):
            fullPath = os.path.join(root, f)
            fullPathLower = os.path.join(root, f[0].lower() + f[1:])
            command = 'git mv --force ' + fullPath + ' ' + fullPathLower
            print(command)
            os.system(command)

-1

작업 예 :

git mv ./src/images/poster_video.PNG ./src/images/poster_video.png

2
당신의 대답은 원래의 질문을 해결하지 못합니다. 확장 기능이 부족합니다
Tavo

나는 이것을 정확하게 찾고 있지만 500 이미지입니다. git에서 ./src/images/TESTIMAGE.png의 이름을 ./src/images/testimage.png로 바꾸고 싶습니다
Mohak Londhe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.