다음을 통해 공유


Git 대/소문자 구분

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Windows 및 macOS 파일 시스템은 기본적으로 대/소문자를 구분하지 않지만 대/소문자를 유지합니다. 대부분의 Linux 파일 시스템은 대/소문자를 구분합니다. Git은 원래 Linux 커널의 버전 제어 시스템으로 빌드되었으므로 당연히 대/소문자를 구분합니다.

대/소문자를 구분하지 않는 OS와 관련된 많은 문제가 Windows용 Git에서 해결되었지만 몇 가지 단점이 다시 기본.

파일 및 폴더 이름

Linux에서는 "File.txt" 및 "file.txt"이 모두 포함된 Git 리포지토리를 검사 문제가 되지 않습니다. 고유 파일 이름입니다. Windows 및 macOS에서 검사 두 파일을 모두 출력하면 두 번째 파일이 첫 번째 파일을 덮어씁니다. 두 폴더가 대/소문자만 다른 경우 해당 콘텐츠는 대/소문자를 구분하지 않는 파일 시스템에 함께 혼합됩니다.

사례 충돌 해결

이 문제를 사용하여 리포지토리를 해결하는 한 가지 방법은 대/소문자를 구분하는 환경에서 리포지토리를 검사 것입니다. 더 이상 충돌하지 않도록 파일 및 폴더의 이름을 바꾼 다음, 해당 변경 내용을 리포지토리에 푸시합니다. Linux용 Windows 하위 시스템 그러한 환경 중 하나입니다. 또 다른 방법은 각 충돌에 대해 명령을 git mv -f <conflicting name> <non-conflicting name> 사용하여 두 파일 이름에 대해 정확한 대문자를 사용하는 것입니다.

사례 충돌 방지

처음부터 이 상황을 만들지 않는 것이 좋습니다. Azure Repos는 이러한 상황으로 이어질 푸시를 방지하기 위해 사례 적용 설정을 제공합니다. 개발자의 경우 탭 완성을 사용하여 파일을 커밋하는 습관을 채택하는 것도 도움이 됩니다. Windows와 macOS는 모두 대/소문자를 보존하므로 Git의 내부는 파일 시스템이 사용하는 것과 정확히 동일한 대/소문자를 볼 수 있습니다.

분기 및 태그 이름

대/소문자만 다른 두 개의 분기 또는 태그('refs'라고 함)를 만들 수 있습니다. Git의 내부 및 Azure DevOps Services/TFS는 두 개의 별도 참조로 처리합니다. 사용자의 컴퓨터에서 Git은 파일 시스템을 사용하여 refs를 저장합니다. 페치 및 기타 작업은 모호성으로 인해 실패하기 시작합니다. 각 ref는 작은 파일로 표시되며 ref 이름에 문자가 / 포함된 경우 최종 / 부분 앞의 부분은 폴더로 표시됩니다.

문제를 방지하는 간단한 방법 중 하나는 항상 모든 소문자 분기 및 태그 이름을 사용하는 것입니다. 이 문제로 두 개의 분기 또는 태그를 이미 만든 경우 Azure Repos 웹 UI에서 수정할 수 있습니다.

분기 이름 수정

분기 페이지에서 관련 커밋으로 이동합니다. 상황에 맞는 메뉴에서 "새 분기"를 선택합니다. 분기에 대/소문자 충돌이 없는 새 이름을 지정합니다. 분기 페이지로 돌아가서 충돌하는 분기를 삭제합니다.

태그 이름 수정

태그 이름을 수정하는 단계는 분기와 비슷합니다. 태그 페이지에서 태그가 지정된 커밋으로 이동합니다. 상황에 맞는 메뉴에서 "태그 만들기"를 선택합니다. 태그에 대/소문자 충돌이 없는 새 이름을 지정합니다. 태그 페이지로 돌아가서 충돌하는 태그를 삭제합니다.