programing

Git에서 대소문자를 구분하는 파일 이름만 변경하려면 어떻게 해야 합니까?

abcjava 2023. 4. 26. 22:51
반응형

Git에서 대소문자를 구분하는 파일 이름만 변경하려면 어떻게 해야 합니까?

첫 글자를 대문자로 변환하여 파일 이름을 몇 개 변경했습니다.Name.jpgname.jpgGit는 이 변경 사항을 인식하지 못해서 파일을 삭제하고 다시 업로드해야 했습니다.Git가 파일 이름의 변경 사항을 확인할 때 대소문자를 구분할 수 있는 방법이 있습니까?파일 자체를 변경하지 않았습니다.

폴더가 아닌 파일 이름만 변경하는 경우 git mv를 사용할 수 있습니다.

git mv -f yOuRfIlEnAmE yourfilename

(Git 2.0.1 변경 기준)-f위의 주문에서 플래그는 불필요하지만 이전 Git 버전에서는 필요했습니다.)

Git에는 대/소문자를 구분하거나 구분하지 않는 파일 시스템을 예상할지 여부를 알려주는 구성 설정이 있습니다. core.ignorecase구분하도록 이을 Git에 대소자구를분하록려이면설다같설음이정다니합과정을로 설정하면 됩니다.false(이미 파일을 푸시한 경우에는 다른 답변이 있을 때 먼저 파일을 이동해야 합니다.)

git config core.ignorecase false

대소문자를 구분하지 않는 파일 시스템에서 이 옵션을 false로 설정하는 것은 일반적으로 좋지 않습니다.이렇게 하면 이상한 오류가 발생합니다.예를 들어 대소문자만 변경하는 방식으로 파일 이름을 변경하면 Git에서 유사 충돌을 보고하거나 중복(from Mark Amery's comment) 파일을 만듭니다.

문서화

설명서에서 다음을 참조하십시오.

core.ignorecase

참인 경우 이 옵션을 사용하면 FAT와 같이 대소문자를 구분하지 않는 파일 시스템에서 Git가 더 잘 작동할 수 있도록 다양한 해결 방법을 사용할 수 있습니다.를 들어, 목록에서 " " " 를 " " " " 을 찾습니다.makefile가 기할대때는을 기대할 때.Makefilegit는 그것이 정말 같은 파일이라고 가정할 것이고, 계속해서 그것을 기억할 것입니다.Makefile.

기본값은 false이지만 git-clone(1) 또는 git-init(1)이 시도하고 설정합니다.core.ignorecase저장소가 생성될 때 적절한 경우 true입니다.true(으)로 표시됩니다.

대소문자를 구분하지 않는 파일 시스템

대소문자를 구분하지 않는 파일 시스템을 사용하는 가장 인기 있는 두 운영 체제는 다음과 같습니다.

  • 창문들
  • OS X

소스 트리를 사용하여 UI에서 이 모든 작업을 수행할 수 있었습니다.

  1. 이름 바꾸기 FILE.extwhatever.ext
  2. 해당 파일 준비
  3. 이제 이름 바꾸기 whatever.extfile.ext
  4. 해당 파일을 다시 준비

약간 지루하지만 몇 개의 파일만 처리하면 됩니다.

전체 repo에서 git 파일 이름 대소문자 수정:

git rm -r --cached .
git add --all .

git status ##Review that **only** changes staged are renames

## Commit your changes after reviewing:
git commit -a -m "Fixing file name casing"
git push origin main

@Uriahs Victor 코멘트의 설명:

이 명령어는 캐시된 버전의 파일/폴더 이름을 삭제합니다. 이 이름은 git가 아직 존재한다고 생각했습니다.따라서 캐시는 삭제되지만 현재 폴더(로컬로 변경한 경우)에는 모든 내용이 남아 있지만 다른 잘못된 사례 폴더/파일은 더 이상 존재하지 않으므로 삭제된 짓 상태로 표시됩니다.그런 다음 GitHub로 푸시하면 잘못된 사례가 있는 폴더/파일을 제거할 수 있습니다. 답변에는 명령의 의미를 나타내는 그래픽이 있습니다.

OS X에서 수행한 작업은 다음과 같습니다.

git mv File file.tmp
git mv file.tmp file

그렇지 않으면 "파일 존재" 오류가 발생했기 때문에 두 단계입니다.아마도 그것은 추가함으로써 한 단계로 이루어질 수 있습니다.--cached그런 것들.

때때로 Git의 대소문자 민감도를 일시적으로 변경하는 것이 유용합니다.

방법 #1 - 단일 명령에 대한 대/소문자 구분 변경:

git -c core.ignorecase=true checkout mybranch합니다.checkout지휘권또는 더 일반적으로:<<true or false>><<command>> . (댓글에서 이것을 제안한 VonC에게 공로를 돌립니다.)

방법 #2 - 여러 명령에 대한 대/소문자 구분 변경:

설정을 더 오래 변경하려면(예: 다시 변경하기 전에 여러 명령을 실행해야 하는 경우):

  1. git config core.ignorecase 현재설반환합다니예을정다▁e▁setting▁()와 같이 현재 설정을 합니다.false).
  2. git config core.ignorecase <<true or false>> 원하는 새 설정을 설정합니다.
  3. ...다른 여러 명령 실행...
  4. git config core.ignorecase <<false or true>> 구성 값을 이전 설정으로 다시 설정합니다.

git mv 명령을 사용할 수 있습니다.아래 예제에서는 파일 이름을 abcDEF.js에서 abcdef.js로 바꾸면 터미널에서 다음 명령을 실행할 수 있습니다.

git mv -f .\abcDEF.js  .\abcdef.js

OSX에서 이 문제를 방지하고 대소문자를 구분하지 않는 파일 시스템에서 개발할 때 발생하는 다른 문제를 방지하기 위해 Disk Utility를 사용하여 대소문자구분하는 가상 드라이브/디스크 이미지를 생성할 수 있습니다.

디스크 유틸리티를 실행하고 새 디스크 이미지를 생성한 후 다음 설정을 사용합니다(또는 원하는 대로 변경하되 대소문자를 구분하여 유지).

Mac 디스크 유틸리티 스크린샷

Git에게 대소문자를 구분하는 FS에 대해 설명해야 합니다.

git config core.ignorecase false

@Sijmen의 답변과 유사하게, OSX에서 디렉터리 이름을 바꿀다음과 같이 도움이 되었습니다(다른 게시물의 답변에서 영감을 받았습니다).

git mv CSS CSS2
git mv CSS2 css

단하게하기간기▁doing하▁simply.git mv CSS css오류가 했습니다. " 잘된인오발니습다했생".fatal: renaming '/static/CSS' failed: Invalid argument아마도 OSX의 파일 시스템이 대소문자를 구분하지 않기 때문일 것입니다.

p.s BTW 만약 당신이 Django를 사용하고 있다면, collectstatic 또한 대소문자 차이를 인식하지 못할 것이고 당신은 정적 루트 디렉토리에서도 위의 작업을 수동으로 해야 할 것입니다.

  1. 이름 Name.jpgname1.jpg

  2. 파일을 삭제합니다.Name.jpg

  3. 이름 name1.jpgname.jpg

  4. 된 파일 name.jpg에 저지른 일

    git add name.jpg
    git commit --amend
    

다른 답변에서 다음 솔루션을 사용해 보았지만 작동하지 않았습니다.

저장소가 원격으로 호스팅되는 경우(GitHub, GitLab, BitBucket) 원본에서 파일 이름을 변경하고(GitHub.com ) 강제로 하향식으로 파일 이름을 변경할 수 있습니다.

아래의 지침은 GitHub와 관련이 있지만 그 뒤에 있는 일반적인 개념은 원격 저장소 호스팅 플랫폼에 적용되어야 합니다.문제의 이름을 바꾸려는 파일 형식, 즉 GitHub이 브라우저에서 편집 가능한 파일 형식(코드, 텍스트 등) 또는 편집 불가능한 파일 형식(이미지, 이진 등) 중 어느 것인지 기억하십시오.

  1. GitHub.com 를 방문하세요.
  2. GitHub.com 의 저장소로 이동하여 작업 중인 지점을 선택합니다.
  3. 사이트의 파일 탐색 도구를 사용하여 이름을 변경할 파일로 이동합니다.
  4. GitHub에서 브라우저 내에서 파일을 편집할 수 있습니까?
    • a.) 편집 가능
      1. 연필 모양의 "파일 편집" 아이콘을 클릭합니다.
      2. 파일 이름 텍스트 입력에서 파일 이름 변경
    • b.) 편집 불가능
      1. 새 탭에서 "다운로드" 단추를 열고 파일을 컴퓨터에 저장합니다.
      2. 다운로드한 파일 이름 바꾸기
      3. GitHub.com 의 이전 탭에서 "이 파일 삭제" 아이콘(휴지통 모양)을 클릭합니다.
      4. to "에 커밋"을 합니다.branchnamebranch" changes" 브랜치를 합니다.
      5. GitHub.com 의 동일한 디렉토리에서 "Upload files" 버튼을 클릭합니다.
      6. 컴퓨터에서 이름이 변경된 파일 업로드
  5. to "에 커밋"을 합니다.branchnamebranch" changes" 브랜치를 합니다.
  6. 로컬에서 분기를 체크아웃/페치/풀링합니다.
  7. 다 했어요.

다음 명령을 사용합니다.

git config --global  core.ignorecase false

Git 시스템을 전역적으로 구성하여 파일 및 폴더 이름에 대소문자를 구분할 수 있습니다.

Mac OSX High Sierra 10.13은 이 문제를 다소 해결합니다.Git 프로젝트를 위한 가상 APFS 파티션을 만들기만 하면 됩니다. 기본적으로 크기 제한이 없고 공간이 필요하지 않습니다.

  1. Disk Utility에서 Container Disk(컨테이너 디스크)를 선택한 상태에서 + 버튼을 클릭합니다.
  2. 형식에서 APFS(대/소문자 구분) 선택
  3. 을 대라Sensitive
  4. 이익
  5. : 민감한 폴더 만들기: 민감한 폴더 만들기git그리고.ln -s /Volumes/Sensitive/git /Users/johndoe/git

드라이브가 다음 위치에 있을 것입니다./Volumes/Sensitive/

여기에 이미지 설명 입력

Git에서 대소문자를 구분하는 파일 이름만 변경하려면 어떻게 해야 합니까?

GitHub가 이 문제를 처리하는 방법에 대한 사례 민감도 배포 문제에 대한 많은 해결책이 있습니다.

저의 경우, 파일 이름 케이싱 규약을 대문자에서 소문자로 변경했습니다.

나는 깃이 변화를 추적할 수 있다고 믿지만 이 명령은git config core.ignorecase false하는 방식을 .

저의 경우, 명령을 실행했는데 git에 추적되지 않는 레이블로 표시된 추적할 파일이 갑자기 많이 생겼습니다.

그런 다음 git add.를 누르고 git committed를 실행하여 netlify에서 빌드를 한 번 더 실행했습니다.

되는 모든 할 수 를 들어, 그 면 이 표 오 있 수 니 다 습 할 추 적 를 류 러 든 모 제 시 된Module not found: Can't resolve './Components/ProductRightSide' in '/opt/build/repo/components/productsGit가 변경사항을 성공적으로 추적하고 구현할 수 있도록 수정했습니다.

그것은 꽤 해결책이고 좌절에서 손톱만큼 떨어져 있지만, 이것이 확실히 효과가 있을 것이라고 저를 믿으세요.

에는 PS: 문를해결후명실수있행다니습할을령한제▁▁command 명령을 실행할 수 있습니다.git config core.ignorecase trueGit가 대소문자를 구분하여 작동하는 방식을 복원합니다.

고사항git config core.ignorecase false다른 파일 이름 확장자에 문제가 있으므로 주의하십시오. 작업 내용을 알고 확실한 경우 이 작업을 수행하십시오.

여기 netlify에 대한 스레드가 있습니다. 아마도 도움이 스레드는 도움이 될 것입니다.

파일 이름을 많이 변경했는데 일부는 케이스 변경에 불과할 경우 어느 쪽인지 기억하기가 어렵습니다. 수동으로 파일을 "git move"하는 것은 상당한 작업이 될 수 있습니다.파일 이름 변경 작업 중에 수행할 작업은 다음과 같습니다.

  1. 다른 폴더/저장소로 Git이 아닌 모든 파일 및 폴더를 제거합니다.
  2. 현재 빈 git 폴더를 커밋합니다(모든 파일이 삭제된 것으로 표시됩니다).
  3. 모든 파일을 원래 Git 폴더/저장소에 다시 추가합니다.
  4. 비어 있지 않은 현재 Git 폴더를 커밋합니다.

이렇게 하면 이름을 바꾼 파일이나 폴더를 확인하지 않고도 모든 사례 문제를 해결할 수 있습니다.

저는 MacOS에서 여러 번 이 문제에 직면했습니다.Git은 대/소문자를 구분하지만 Mac은 대/소문자만 구분합니다.

다른 사용자가 파일을 커밋합니다.Foobar.java그리고 며칠 후에 그것의 이름을 바꾸기로 결정합니다.FooBar.java▁with다▁it로 실패합니다.The following untracked working tree files would be overwritten by checkout...

이 문제를 해결하는 유일한 신뢰할 수 있는 방법은 다음과 같습니다.

  1. git rm Foobar.java
  2. 수 커밋합니다.git commit -m 'TEMP COMMIT!!'
  3. 당기다.
  4. 변경 내용이 충돌을 삭제했지만 다른 변경 내용은 충돌 이름을 변경했기 때문에 충돌을 병합하도록 강제하는 충돌이 팝업됩니다(따라서 문제가 발생함).
    1. 변경 사항('삭제')을 수락합니다.
    2. git rebase --continue
  5. 여러분의 방법을 하세요.git rebase -i HEAD~2그리고.drop그자리의 TEMP COMMIT!!
  6. 이 파이호확인다니합지는었일로 변경되었는지 확인합니다.FooBar.java

는 @CBarr 답변을 받아 파일 목록으로 수행하기 위해 Python 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()

아무 것도 작동하지 않으면 gitrm 파일 이름을 사용하여 디스크에서 파일을 삭제하고 다시 추가합니다.

저장소 파일 이름을 소문자로 bash 스크립트를 만들었습니다.

function git-lowercase-file {
  tmp="tmp-$RANDOM-$1"
  git mv -f $1 $tmp
  git mv -f $tmp ${1,,}
}

그러면 다음과 같이 사용할 수 있습니다.

git-lowercase-file Name.jpg

또는 단순히 저장소 웹 UI 인터페이스를 통해 필요한 파일 이름을 변경하고 커밋합니다. :)

디렉터리 이름 케이스 변경과 같이 더 복잡한 변경을 수행하는 경우 Linux 컴퓨터에서 변경할 수 있습니다. Linux 자체(Linux 및 Git on Linux)는 이름은 같지만 케이스가 다른 파일/디렉토리를 완전히 다른 파일/디렉토리로 처리하기 때문입니다.

따라서 Windows에서 WSL을 사용하여 Ubuntu를 설치하고, 여기서 Repo를 복제하고, VSL을 사용하여 복제된 Repo 디렉토리를 열고(WSL 원격 확장을 사용하여 Windows에서 WSL Ubuntu에 액세스), VSL을 통해 이름을 변경하고, VSL 디짓 통합을 사용하여 커밋/푸시할 수 있습니다.

언급URL : https://stackoverflow.com/questions/17683458/how-do-i-commit-case-sensitive-only-filename-changes-in-git

반응형