Git for Windows의 autocrlf 설정 오류에 대한 대응

7498 단어 Git줄 바꿈 문자
본고는 ZOZO 기술 #5 Advent Calendar 2019 16일째 기사입니다.
어제는 @meganekids 씨의'엔지니어와 프로젝트 매니저를 위한 Adobe XD 학습회에서 깨달은 4가지'입니다.
다른 직업의 사람들과 순조롭게 교류하기 위해서는 지식의 기반을 구축하는 것이 매우 중요하기 때문에 저는 애프터서비스를 포함한 노력 태도가 매우 좋다고 생각합니다.
이 보도는 Windows에서 쉽게 모일 수 있는git의 코드 자동 변환 기능에 대한 이야기입니다.

배경


제가 속한 MA(마케팅 자동화) 팀은 Windows Server와 Linux 서버를 동시에 사용하여 개발합니다.
Windows에서만 실행되는 VBScript와 Linux에서만 자주 사용되는 케이스 스크립트입니다. 문자 코드와 줄 바꾸기 코드를 고려하지 않으면 문제가 발생할 수 있어 흥분되는 직장입니다.
(텍스트 코드는 이 글에 적혀 있습니다. 관심 있으시면 >Qiita 글
줄 바꾸기에 관해서git는 자동적으로 autocrlf로 전환하는 기능이 있기 때문에 잘 사용할 수 있다면 매우 편리하다.
그러나 이 기능이 ON이면commit 로그와 파일 시스템 식별의 실제 상황에 편차가 생겨 배치 결과가 기대와 다를 수 있다.
Git for Windows는 설치할 때 자동crlf 설정을 선택할 수 있도록 친절합니다.

맨 위의 설정으로 설정하면 autocrlf=true 로 설정되어 줄 바꿈 코드의 자동 변환을 사용합니다.
여기서 선택할 수 있는 것은 좋지만 그 후에 슬프게도 GUI는 설정을 바꿀 수 없다.
만약에 autocrlf가 진짜로 틀렸다면git의 명령을 사용하여 잊지 않을 필요가 있기 때문에 당시의 대응 방법을 총괄하고 싶습니다.조작 자체가 간단하기 때문에 주변 지식의 정리 의미가 강하다.

환경


이 글은 윈도우즈 10을 사용하고 Git for Windows에git를 설치한 환경을 구상했다.
나중에 Git for Windows 버전 차이에 대해 설명합니다.
v2.19(내가 최초로 설치한 물건)와 v2.24(기사 제작 시 최신)가 등장했다.

autocrlf


사용하는 운영체제에 따라 줄 바꾸기 코드의 표준 사용도 다르다.
특히 Windows의 CRLF, Mac의 LF는 표준적으로 사용됩니다.
LinuxOS에서 서버를 이동할 때 자주 사용되는 케이스 스크립트
셸 스크립트의 줄 바꿈 코드가 CRLF라면 귀찮기 때문에git의 설정은 자동적으로 autocrlf라는 줄 바꿈 코드를 변환하는 기능이 있습니다.
이것은git에서commit할 때와 checkout할 때 자동으로 줄 바꿈 코드를 변환하는 구조입니다.
중요한 것은 작업 중의 줄 바꿈 코드와commit 로그로 기록된 줄 바꿈 코드의 기능을 체계적으로 고정시키는 것이다.
기본적으로 Windows Server를 사용하는 환경(CRLF가 필요한 환경)에서 개발된다면 autocrlf는false일 것이다.
autocrlf=true는git에 최종적으로 기록된 줄 바꿈 코드를 LF에 고정할 때 사용하는 설정이므로 LF를 추방할 때 사용하십시오.
다음git 문서의 코어입니다.autocrlf의 항목에 기록이 있으니 저쪽을 참조하십시오.
https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%81%AE%E8%A8%AD%E5%AE%9A
git의 설정은 git config 명령을 사용하여 변경할 수 있지만, 이 때 세 가지 환경을 주의해야 합니다.
  • 시스템:git의 전체 시스템 설정
  • global: 홈 디렉터리 바로 아래에 있는 설정 파일을 보기 위해 사용자 단위로 모두 적용되는 설정
  • local:git가 관리하는 저장소의git 산하의 설정 파일 보기, 저장 단위 설정
  • 각각 - 시스템, - 글로벌, - local 및 옵션을 제공합니다.
    현재git의config는 어떤 파일이 설정되었는지 아래 명령으로 보면 이해하기 쉽습니다.
    git config --show-origin core.autocrlf
    
    --show-origin, 어떤 파일로 설정되었는지 알 수 있습니다.
    여기서 중요한 점은git의 설정 파일은
    local>global>system의 순서에 따라 우선합니다.
    개별적으로 설정된 내용이 우선적으로 적용되는 것 같다.
    git config-help 출력된 문서는 다음과 같습니다.우선도에 관해서는 특별한 기술은 없지만, 먼저 실으세요.
    When reading, the values are read from the system, global and repository local configuration files by default, and options --system, --global, --local and --file <filename> can be used to tell the command to read from only that location (see the section called "FILES").
    

    Windows를 사용하여 Git for 자동 구성


    나는 실제 설치할 때의 설정이 어떻게 반영되는지 보았다.
    Git for Windows는 설치할 때 autocrlf 설정을 선택할 수 있습니다.
    이럴 때 잘 이해하고 설정하면 문제가 생기지 않겠지.
    다시 설치할 때의 화면입니다.

    여기서 맨 위의 옵션을 선택하면 autocrlf=true 환경의git가 완성됩니다.
    설정 내용을 확인합니다.
    설치하면 이렇습니다.
    v2.24
    $ git config --show-origin core.autocrlf
    file:C:/Program Files/Git/etc/gitconfig true
    
    v2.19
    $ git config --show-origin core.autocrlf
    file:"C:\\ProgramData/Git/config"       true
    
    버전에 따라 구성 파일도 다르지만 모두 이러한 설정입니다.
    Git for windows 릴리즈 노트에 따르면 v2.23 업데이트로 인해 설정 파일의 설정 위치가 변경된 것 같습니다.
    Note! As a consequence of making git config --system work as expected, the location of the system config is now C:\Program Files\Git\etc\gitconfig (no longer split between C:\Program Files\Git\mingw64\etc\gitconfig and C:\ProgramData\Git\config), and likewise the location of the system gitattributes is now C:\Program Files\Git\etc\gitattributes (no longer C:\Program Files\Git\mingw64\etc\gitattributes). Any manual modifications to C:\ProgramData\Git\config need to be ported manually.
    

    설정 변경 방법


    각 환경에 대해 설명하다.

    local


    어쨌든 난 이 창고만 처리하고 싶어.이렇게 되면 다음 방법으로local의 설정을 업데이트합니다.
    git config --local core.autocrlf false
    
    그러면 설정값은 다음과 같습니다.
    $ git config --show-origin core.autocrlf
    file:.git/config        false
    
    이로써 특정 저장소에 대한 설정이 완료됩니다.
    가장 간단하고 영향 범위가 작다.

    global


    기본적으로 autocrlf가false라면 이거 괜찮아요.
    git config --global core.autocrlf false
    
    -- local로 설정되지 않은 경우 다음 내용이 표시됩니다.
    $ git config --show-origin core.autocrlf
    file:C:/Users/{username}/.gitconfig false
    

    system


    근본적으로 바꾸고 싶다면 이쪽 설정을 바꾸자.이것으로 바꾸는 것이 비교적 안심이 된다.
    하지만 권한 문제가 있으므로 Git Bash를 관리자로 실행한 다음 명령을 실행해야 합니다.
    git config --system core.autocrlf false
    
    결국 v2.19는 왠지 모르게 다른 파일을 만들었다.왜요?
    $ git config --show-origin core.autocrlf
    file:C:/Program Files/Git/mingw64/etc/gitconfig false
    
    C:\\ProgramData/Git/config 는 진짜로 설정하지만 C:/Program Files/Git/mingw64/etc/gitconfig 가짜가 우선인 것 같습니다.
    그렇다면 손으로 고치는 C:\\ProgramData/Git/config 기분이 더 좋다.
    그러나 v2.24에서 같은 파일을 덮어썼기 때문에 새로운 파일을 사용하면 예쁘게 수정할 수 있습니다.
    Git for Windows가 오래되면 v2.23 이후의 버전으로 업데이트됩니다. 그때 autocrlf를false로 설정하면 예쁠 수 있습니다.

    재설치


    이것도 괜찮아요.

    맨 아래 단추를 선택하면 autocrlf=false 상태에서 시스템의config를 만듭니다.

    마지막


    이번에도 Windows 환경을 위한 보도입니다.나는 판본이 다르기 때문에 행위 차이가 상당히 혼란스러운 근원이라고 생각하기 때문에 이 부분을 정리할 수 있어서 정말 좋다.
    평소 Mac을 사용하기 때문에 번거로워지기 쉬운 문제지만 CRLF의 줄 바꿈 코드가 필요한 세계도 있다는 것을 이해하는 것은 개발에 있어서 매우 중요하기 때문에 앞으로도 직면하고 싶다.
    내일은 @satto_sann 기사니까 꼭 봐주세요~

    좋은 웹페이지 즐겨찾기