Git 리포지토리에서 디렉토리의 이름을 올바르게 바꾸는 방법은 무엇입니까?


654

나는 원하는 이름으로 새 디렉토리로 이름이 변경 될 디렉토리를 복사하는 작업을해야한다고 생각 이전 디렉토리를 삭제 하고 git add, git commit그리고 push모든 것을. 그러나 이것이 최선의 방법입니까?



5
Git에 관한 한, 복사 및 삭제는 이동과 동일합니다. 힘내 같은 방식으로 (복사 + 삭제) 및 (이동)을 기록합니다.
Dietrich Epp

답변:


1182

기본 이름 변경 (또는 이동) :

git mv <old name> <new name>

대소 문자 구분 이름 바꾸기 (예 : 에서 casesensitiveCaseSensitive- 당신은 두 단계를 사용해야합니다 :

git mv casesensitive tmp
git mv tmp CaseSensitive

( Git의 대소 문자 구분에 대한 추가 정보… )

커밋과 푸시는 git repo에서 디렉토리의 이름을 바꾸는 가장 간단한 방법입니다.


231
당신이에서 이름 싶은 경우 casesensitiveCaseSensitive: 당신은이 방법을 수행 할 수 있습니다 git mv casesensitive Temp다음과 git mv Temp CaseSensitive
ViliusK

3
모든 로그와 통계를 저장합니까?
orezvani

23
@ViliusK 당신이 대소 문자를 구분하는 디렉토리를 다루고 있다면 내가 찾은 쉬운 방법은 git rm -rf --cached path/to/your/directories다시 추가하고 커밋하는 것입니다.
dtothefp

1
그러나 왜 GIT가 패키지 / 디렉토리의 이름 변경을 제대로 지원하지 않습니까? 별도의 폴더를 만들어야하는 이유는 무엇입니까? 내가 패키지의 이름을 변경하면 안되는 차이로 가져 와서 커밋 & 푸시시 관리해야합니까?
Ahmed

1
고마워. 나를 위해 먼저 git config core.ignorecase false명령을 연속으로 실행 한 다음 실행해야했습니다. 두 번째 부분에서는 source is empty오류가 발생했습니다.
Rika

107

이 오류가 표시되면 치명적 : 'foldername'이름 바꾸기 실패 : 잘못된 인수

이 시도:

git mv foldername tempname && git mv tempname folderName


8
이것이 디렉토리에서 대소 문자를 변경하는 데 필요한 것입니다.
cjserio

이 버전에서 토큰 '&&'은 (는) 유효한 명령문 구분 기호가 아닙니다. 자식 버전 2.11.0.windows.
Tim Hardy

@ 팀 하디은 또한 두 개의 명령으로 실행할 수 있습니다 git mv foldername tempnamegit mv tempname folderNameWindows에서 작동합니다.
Larkeith

이 작동하지 않습니다! 최종 결과는 'tempname'폴더 안에 새로운 '폴더 이름'폴더를 넣어 것입니다
내기

61

1. 폴더 이름을 oldfolder에서 newfolder로 변경하십시오.

git mv oldfolder newfolder

2. newfolder이 저장소에 이미 및 당신이 그것을 무시하고 사용하려는 경우 : -

git mv -f oldfolder newfolder

git mv로 이름을 바꾼 후 인덱스에 변경 사항을 추가하고 커밋하는 것을 잊지 마십시오.

대소 문자를 구분하지 않는 파일 시스템에서 foldername을 folderName으로 이름 바꾸기

일반 mv 명령 (git mv 아님)을 사용한 간단한 이름 바꾸기는 git의 파일 변경으로 인식되지 않습니다. 다음 줄과 같이 'git mv'명령으로 시도하면

git mv foldername folderName

대소 문자를 구분하지 않는 파일 시스템을 사용하는 경우 (예 : Mac의 경우) 대소 문자를 구분하도록 구성하지 않은 경우 다음과 같은 오류 메시지가 나타납니다.

치명적 : 'foldername'이름 바꾸기 실패 : 잘못된 인수

그리고 그것을 작동시키기 위해 당신이 할 수있는 일이 있습니다 :-

git mv foldername tempname && git mv tempname folderName

이렇게하면 처음에 폴더 이름을 완전히 다른 폴더 이름으로 바꾸어 이름 바꾸기 프로세스를 분리합니다. 다른 폴더 이름으로 이름을 바꾼 후 폴더 이름을 새 folderName으로 바꿀 수 있습니다. 그 'git mv 's 후에 다시 변경 사항을 추가하고 커밋하는 것을 잊지 마십시오. 이것은 아마도 아름다운 기술은 아니지만 완벽하게 작동합니다. 파일 시스템은 여전히 ​​소문자 변경을 인식하지 못하지만 git은 새로운 폴더 이름으로 이름을 바꿨 기 때문에 git은 이름을 바 꾸었습니다.


9

파일 시스템을 사용하여 디렉토리의 이름을 바꿀 수 있습니다. 그럼 당신은 할 수 git rm <old directory>git add <new directory>( 도움말 페이지 ). 그러면 커밋하고 푸시 할 수 있습니다.

Git은 내용이 동일하고 단지 이름 바꾸기 작업임을 감지하고 기록에 이름 바꾸기 항목으로 나타납니다. 커밋하기 전에이 경우인지 확인할 수 있습니다.git status


12
하지만이 방법으로 커밋 기록 전체를 잃게됩니다.
ViliusK

1
-follow 플래그를 사용하면이를 유지할 수 있습니다.
Oleksi

하나 대신 두 개의 명령이 있고 플래그를 추가해야합니까? 어떤 식 으로든 git mv보다 낫습니까?
antgel

4
@topper 아니요, git mv는 rm + add의 별칭입니다. git mv를 사용하는 것이 더 나은 솔루션입니다.
Oleksi

5
@topper 파일을 이동하는 데 사용하는 방법에 관계없이 기록을 보려면 여전히 --follow를 사용해야합니다.
Oleksi

3

웹 응용 프로그램에서는 할 수 없다고 생각하지만 Git Client의 모든 폴더의 이름을 바꿀 수 있습니다. 파일을 새 저장소로 옮기고 원격 저장소로 푸시하는 것보다 이름이 바뀐 새 폴더로 파일을 이동합니다.

매우 비슷한 문제가 있습니다 : 대문자에서 소문자 (Abc-> abc와 같은)로 다른 폴더의 이름을 바꾸어야했습니다. 모든 폴더의 이름을 더미 이름 ( 'abc___'과 같은)으로 바꾸고 원격 저장소에 커밋 한 후에 모든 폴더의 이름을 abc와 같은 소문자로 원래 이름으로 바꿨습니다.


0

두 단계로 해결했습니다. mv 명령을 사용하여 폴더의 이름을 바꾸려면 권한이 필요합니다. 권한이 없으면 다음 단계를 수행하십시오. 대소 문자 구분을 대소 문자 구분으로 바꾸려고한다고 가정하십시오.

1 단계 : 폴더 이름을 대소 문자를 구분하여 탐색기에서 다른 이름으로 바꿉니다. 예를 들어, folder1에 대해 대소 문자 구분 이름 바꾸기가이 변경을 커밋합니다.

2 단계 : 새로 이름이 지정된이 폴더 (폴더 1)의 이름을 대소 문자 구분 이름 (Casesensitive)으로 바꿉니다. folder1의 이름을 대소 문자를 구분하십시오. 이 변경 사항을 적용하십시오.


0

대소 문자를 구분하는 이름 바꾸기를 git mv somefolder someFolder위해 이전에 저에게 효과가 있었지만 오늘 어떤 이유로 든 작동하지 않았습니다. 해결 방법으로 새 ​​폴더를 만들고의 temp모든 내용을 somefolder으로 이동하고 temp삭제 somefolder하고 커밋 한 temp다음 생성 한 다음의 someFolder모든 내용을 temp으로 이동하고 someFolder삭제 temp하고 커밋하고 푸시 someFolder했습니다. someFolder자식 처럼 표시 됩니다.


-16

단순히 폴더 이름을 바꾸십시오. git은 "content-tracker"이므로 SHA1 해시는 동일하고 git은 이름을 바꾼다는 것을 알고 있습니다. 변경되는 유일한 것은 트리 개체입니다.

rm <directory>
git add .
git commit

1
항상 작동하지는 않습니다. 그것은 분명히 sth를 위해 작동하지 않았습니다. 20 % 같은 파일 ...
Tomáš Fejfar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.