나는에 의해 몇 개의 파일 이름을 변경 한에서와 같이 첫 글자, 드 활용 Name.jpg
하는 방법에 대해 name.jpg
. 힘내는이 변경 사항을 인식하지 못하고 파일을 삭제하고 다시 업로드해야했습니다. 파일 이름의 변경 사항을 확인할 때 Git이 대소 문자를 구분할 수있는 방법이 있습니까? 파일 자체는 변경하지 않았습니다.
git mv
작업을 참조하십시오 .
나는에 의해 몇 개의 파일 이름을 변경 한에서와 같이 첫 글자, 드 활용 Name.jpg
하는 방법에 대해 name.jpg
. 힘내는이 변경 사항을 인식하지 못하고 파일을 삭제하고 다시 업로드해야했습니다. 파일 이름의 변경 사항을 확인할 때 Git이 대소 문자를 구분할 수있는 방법이 있습니까? 파일 자체는 변경하지 않았습니다.
git mv
작업을 참조하십시오 .
답변:
git mv 사용할 수 있습니다 :
git mv -f OldFileNameCase newfilenamecase
-f
플래그 가 필요하지 않습니다 .
-f
그렇지 않으면 fatal: destination exists
오류가 발생할 수 있습니다.
Git에는 대 / 소문자를 구분할지 여부를 알려주는 구성 설정이 있습니다 core.ignorecase
. Git이 대소 문자를 구분하도록하려면이 설정을 false
다음과 같이 설정하십시오 .
git config core.ignorecase false
로부터 git config
문서 :
core.ignorecase
true 인 경우이 옵션을 사용하면 다양한 해결 방법을 통해 git이 FAT와 같이 대소 문자를 구분하지 않는 파일 시스템에서 더 잘 작동 할 수 있습니다. 예를 들어, 디렉토리 목록에서
makefile
git이 예상하는 시간을 찾으면Makefile
git은 파일이 실제로 같은 파일이라고 가정하고 계속로 기억합니다Makefile
.git-clone (1) 또는 git-init (1) 이
core.ignorecase
리포지토리가 생성 될 때 적절한 경우 조사하고 true를 설정 한다는 점을 제외하고 기본값은 false 입니다.
내가 알고있는 대소 문자를 구분하지 않는 파일 시스템이있는 가장 널리 사용되는 두 가지 운영 체제는
false
에서 대소 문자를 구분하지 않는 파일 시스템 에서이 옵션을 설정 하는 것은 나쁜 생각 입니다. 반드시 분명하지는 않습니다. 예를 들어, 난 그냥 다음에서 파일의 이름을 변경, 내 문제를 해결하는 것입니다 생각, 내 맥이 시도 productPageCtrl.js
에 ProductPageCtrl.js
. git status
톱 새로운 라는 파일을 ProductPageCtrl.js
하지만, 하지 않은 그 생각 productPageCtrl.js
이 삭제되었다. 새 파일을 추가하고 커밋하고 GitHub에 푸시했을 때 GitHub 저장소에는 로컬 저장소에 하나만 있었지만 두 파일이 모두 포함되었습니다 .
git mv
파일을 이동하고 git이 파일을 관리하는 방법을 보는 데 사용하십시오 . 당신이 자식없이 파일을 이동하는 경우가 아무것도 파일 시스템이 자식에게 진실을 말하고되지 않는 자식이 할 수 있습니다. 이것은 git / linux가 아닌 ntfs / fat / hfs의 문제입니다.
SourceTree를 사용하여 UI 에서이 모든 것을 할 수있었습니다.
FILE.ext
로whatever.ext
whatever.ext
을file.ext
약간 지루하지만 몇 개의 파일로만 수행 해야하는 경우 매우 빠릅니다.
이것이 내가 OS X에서 한 일입니다.
git mv File file.tmp
git mv file.tmp file
그렇지 않으면 "파일이 있습니다"오류가 발생하여 두 단계가 수행됩니다. 아마도 추가 --cached
또는 이와 같은 방법으로 한 단계에서 수행 할 수 있습니다 .
-f
(force)는 당신이 찾고있는 깃발입니다.
-f
기본 FS가 대소 문자를 구분하지 않는 경우 플래그가 도움이되지 않습니다. 그러나 2 단계 솔루션은 저에게
-f
작동했습니다! 팁 주셔서 감사합니다
-f
플래그가 없는 Windows의 폴더에서도 작동했습니다 .
git -c "core.ignorecase=false" add .
커밋을 위해 케이스가 변경된 파일을 고려합니다.
Git의 대 / 소문자 구분 을 일시적으로 변경하는 것이 유용한 경우가 있습니다.
방법 # 1-단일 명령에 대한 대소 문자 구분 변경 :
git -c core.ignorecase=true checkout mybranch
단일 checkout
명령에 대해 대소 문자 구분을 해제 합니다. 또는보다 일반적으로 : . (의견에 이것을 제안한 VonC의 공로)git -c core.ignorecase=
<<true or false>>
<<command>>
방법 # 2-여러 명령의 대소 문자 구분 변경 :
더 오래 설정을 변경하려면 (예 : 다시 변경하기 전에 여러 명령을 실행해야하는 경우) :
git config core.ignorecase
(예 : 현재 설정을 반환합니다 false
).git config core.ignorecase
<<true or false>>
-원하는 새 설정을 지정하십시오.git config core.ignorecase
<<false or true>>
-구성 값을 이전 설정으로 다시 설정하십시오.git -c core.ignorecase=<true or false> checkout <<branch>>
않습니까? 후에 재설정 할 것이 없습니다.
OSX에서이 문제를 피하고 대소 문자를 구분하지 않는 파일 시스템 개발과 관련된 다른 문제를 피하기 위해 디스크 유틸리티를 사용하여 대소 문자를 구분하는 가상 드라이브 / 디스크 이미지 를 만들 수 있습니다 .
디스크 유틸리티를 실행하고 새 디스크 이미지를 작성하고 다음 설정을 사용하십시오 (또는 원하는대로 변경하지만 대소 문자를 구분하십시오).
git에게 대소 문자를 구분하는 FS에 있는지 확인하십시오.
git config core.ignorecase false
다른 답변에서 다음 솔루션을 시도했지만 작동하지 않았습니다.
리포지토리가 원격으로 호스팅되는 경우 (GitHub, GitLab, BitBucket) 원본에서 파일 이름을 바꾸고 (GitHub.com) 하향식으로 파일 이름을 바꿀 수 있습니다.
아래의 지침은 GitHub와 관련이 있지만, 일반적인 지침은 원격 리포지토리 호스팅 플랫폼에 적용해야합니다. GitHub가 브라우저 내에서 편집 가능 (코드, 텍스트 등) 또는 편집 불가능 (이미지, 이진 등)으로 간주하는 파일 형식인지 여부에 관계없이 이름을 바꾸려는 파일 형식을 명심하십시오.
branchname
지점에 직접 커밋 "라디오 버튼이 선택되어 있는지 확인하고 " 변경 사항 커밋"버튼을 클릭하십시오.branchname
지점에 직접 커밋 "라디오 버튼이 선택되어 있는지 확인하고 " 변경 사항 커밋"버튼을 클릭하십시오.@Sijmen의 답변과 비슷하게 디렉토리 이름을 바꿀 때 OSX에서 나에게 도움 이 되었습니다 (다른 게시물 의이 답변에서 영감을 얻음 ).
git mv CSS CSS2
git mv CSS2 css
단순히 OSX의 파일 시스템이 대소 문자를 구분하지 않기 때문에 git mv CSS css
잘못된 인수 오류가 발생했습니다.fatal: renaming '/static/CSS' failed: Invalid argument
ps BTW Django를 사용하는 경우 collectstatic도 대소 문자 차이를 인식하지 못하며 정적 루트 디렉토리에서도 수동으로 위의 작업을 수행해야합니다
1) 파일 이름 Name.jpg
을name1.jpg
2) 커밋 제거 된 파일 Name.jpg
3) 파일 이름 name1.jpg
을name.jpg
4) name.jpg
이전 커밋에 추가 된 파일 수정
git add
git commit --amend
fatal: bad source, source=name1.jpg, destination=name.jpg
3 단계 에서이 문제가 발생합니다. 제안이 있습니까? Thx
git add
.
Mac OSX High Sierra 10.13이이를 약간 수정합니다. git 프로젝트를위한 가상 APFS 파티션을 만드십시오. 기본적으로 크기 제한이없고 공간이 없습니다.
Sensitive
git
및ln -s /Volumes/Sensitive/git /Users/johndoe/git
당신의 드라이브는 /Volumes/Sensitive/
MacOS 에서이 문제에 여러 번 직면했습니다. 힘내는 대소 문자를 구분하지만 Mac은 대소 문자 만 보존합니다.
누군가 파일을 커밋하고 Foobar.java
며칠 후에 파일 이름을로 변경하기로 결정했습니다 FooBar.java
. 최신 코드를 가져 오면 실패합니다.The following untracked working tree files would be overwritten by checkout...
내가 본 것을 신뢰할 수있는 유일한 방법은 다음과 같습니다.
git rm Foobar.java
git commit -m 'TEMP COMMIT!!'
git rebase --continue
git rebase -i HEAD~2
및 drop
을TEMP COMMIT!!
FooBar.java
많은 파일 이름 바꾸기를 수행하고 일부 파일의 이름이 변경되었을 때 어떤 파일인지 기억하기 어렵습니다. 파일을 수동으로 "git moving"하는 것은 꽤 효과가있을 수 있습니다. 따라서 파일 이름 변경 작업 중에 수행 할 작업은 다음과 같습니다.
이렇게하면 이름을 바꾼 파일이나 폴더를 파악하지 않고도 모든 사례 문제가 해결됩니다.
git commmit --amend
단락 4에서 왜 그렇지 않습니까? 그렇지 않으면 모든 파일을 제거하여 추가 커밋이 발생합니다. 또는 git rebase -i
스쿼시와 함께 사용할 수 있습니다 .
@CBarr 답변을 가져 와서 파일 목록으로 파이썬 3 스크립트를 작성했습니다.
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import os
import shlex
import subprocess
def run_command(absolute_path, command_name):
print( "Running", command_name, absolute_path )
command = shlex.split( command_name )
command_line_interface = subprocess.Popen(
command, stdout=subprocess.PIPE, cwd=absolute_path )
output = command_line_interface.communicate()[0]
print( output )
if command_line_interface.returncode != 0:
raise RuntimeError( "A process exited with the error '%s'..." % (
command_line_interface.returncode ) )
def main():
FILENAMES_MAPPING = \
[
(r"F:\\SublimeText\\Data", r"README.MD", r"README.md"),
(r"F:\\SublimeText\\Data\\Packages\\Alignment", r"readme.md", r"README.md"),
(r"F:\\SublimeText\\Data\\Packages\\AmxxEditor", r"README.MD", r"README.md"),
]
for absolute_path, oldname, newname in FILENAMES_MAPPING:
run_command( absolute_path, "git mv '%s' '%s1'" % ( oldname, newname ) )
run_command( absolute_path, "git add '%s1'" % ( newname ) )
run_command( absolute_path,
"git commit -m 'Normalized the \'%s\' with case-sensitive name'" % (
newname ) )
run_command( absolute_path, "git mv '%s1' '%s'" % ( newname, newname ) )
run_command( absolute_path, "git add '%s'" % ( newname ) )
run_command( absolute_path, "git commit --amend --no-edit" )
if __name__ == "__main__":
main()