Windows의 Git : crlf 설정은 무엇을 의미합니까?
나는 자식에 CRLF 설정과 관련된 복잡성을 이해하지 않습니다 core.autocrlf,core.safecrlf
저는 팀에서 크로스 플랫폼 프로젝트를 개발 중이며 Windows와 Linux 개발자 모두 줄 끝 스타일 때문에 수정 된 파일을 git 표시없이 함께 작업 할 수 있기를 바랍니다.
다양한 설정은 무엇을 의미합니까? 옵션을 선택하면 어떤 결과가 발생합니까? 제 경우에 가장 적합한 솔루션은 무엇입니까?
예, 이 질문을 알고 있으며 답변이 통찰력이 없어 도움이되지 않았습니다.
에 대한 세 가지 값 autocrlf:
true-콘텐츠가 저장소로 들어가면 (커밋 됨) 줄 끝이 LF로 변환되고 콘텐츠가 저장소에서 나오면 (체크 아웃 됨) 줄 끝이 CRLF로 변환됩니다. 이것은 일반적으로 단서가없는 윈도우 사용자 / 편집자를위한 것입니다. 편집자 (또는 사용자)가 CRLF 엔딩을 사용하여 파일을 생성하고 정상적인 LF 엔딩을 보면 겁이 날 것이지만 리포지토리에 LF 엔딩을 원한다는 가정을 감안할 때 이것은 여러분을 다룰 것입니다. 하지만 일이 잘못 될 수 있습니다. 링크 된 질문에는 가짜 병합 충돌의 예와 수정 된 파일 보고서가 있습니다.input-콘텐츠가 저장소에 들어가면 줄 끝이 LF로 변환되지만 콘텐츠는 나가는 동안 그대로 유지됩니다. 이것은true편집자가 실제로 LF 엔딩을 올바르게 처리 할 수 있다는 가정하에 기본적으로와 동일한 영역에 있습니다. CRLF로 끝나는 파일을 실수로 생성 할 가능성을 막고 있습니다.false-git은 줄 끝을 전혀 다루지 않습니다. 그것은 당신에게 달려 있습니다. 이것은 많은 사람들이 권장하는 것입니다. 이 설정을 사용하면 파일의 줄 끝이 엉망이 될 경우이를 알고 있어야하므로 병합 충돌이 발생할 가능성이 훨씬 적습니다 (알려진 사용자 가정). 개발자에게 편집기 / IDE 사용 방법을 교육하면 문제를 거의 해결할 수 있습니다. 프로그래머 용으로 디자인 한 모든 편집기는 올바르게 구성되면이 문제를 처리 할 수 있습니다.
주 autocrlf콘텐츠에 영향을 미치지 않습니다 이미 저장소에 있습니다. 이전에 CRLF 엔딩으로 무언가를 저지른 적이 있다면 그대로 유지됩니다. 이것은 autocrlf에 의존하지 않는 아주 좋은 이유입니다. 한 사용자가 설정하지 않은 경우 CRLF 엔딩이있는 콘텐츠를 저장소에 가져올 수 있으며 계속 유지됩니다. 정규화를 강제하는 더 강력한 방법은 text 속성을 사용하는 것입니다 . auto주어진 경로 에 대해 설정 하면 git이 내용이 텍스트 (이진이 아님)라고 결정한다고 가정하고 줄 끝 정규화로 표시합니다.
관련 옵션은 safecrlf기본적으로 이진 파일에서 CRLF 변환을 수행하지 않도록하는 방법입니다.
저는 Windows 문제와 자식을 다룬 경험이 많지 않으므로 함축 / 함정에 대한 피드백을 환영합니다.
커밋 및 체크 아웃 사례에 대한 3 가지 가능한 값을 탐색했으며 결과 테이블이 다음과 같습니다.
╔═══════════════╦══════════════╦══════════════╦══════════════╗
║ core.autocrlf ║ false ║ input ║ true ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ git commit ║ LF => LF ║ LF => LF ║ LF => LF ║
║ ║ CR => CR ║ CR => CR ║ CR => CR ║
║ ║ CRLF => CRLF ║ CRLF => LF ║ CRLF => LF ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ git checkout ║ LF => LF ║ LF => LF ║ LF => CRLF ║
║ ║ CR => CR ║ CR => CR ║ CR => CR ║
║ ║ CRLF => CRLF ║ CRLF => CRLF ║ CRLF => CRLF ║
╚═══════════════╩══════════════╩══════════════╩══════════════╝
core.autocrlf = input모든 플랫폼 에서 사용하는 것이 좋습니다 . 이 경우 Git이 직면 CRLF하면 암시 적으로으로 변환 LF되고 기존 파일은 LF그대로 유지됩니다.
참고로, 기본적으로 Windows로 끝나는 줄은 CRLF를 사용하고 Linux는 LF를 사용합니다. 명확한 이해를 위해 아래 표를 찾으십시오.
╔═══════════════╦══════════════╦══════════════╦══════════════╗
║ core.autocrlf ║ false ║ input ║ true ║
║ ║ Win => Unix ║ Win => Unix ║ Win => Unix ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ git commit ║ LF => LF ║ LF => LF ║ LF => LF ║
║ ║ CR => CR ║ CR => CR ║ CR => CR ║
║ ║ CRLF => CRLF ║ *CRLF => LF ║ *CRLF => LF ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ git checkout ║ LF => LF ║ LF => LF ║ *LF => CRLF ║
║ ║ CR => CR ║ CR => CR ║ CR => CR ║
║ ║ CRLF => CRLF ║ CRLF => CRLF ║ CRLF => CRLF ║
╚═══════════════╩══════════════╩══════════════╩══════════════╝
위의 표 형식 정보에서 * 기호는 Windows와 Unix의 차이점을 강조합니다. 다음은 OS 플랫폼을 기반으로 한 CLRF 정보입니다.
Windows 사용자의 경우
- Windows 사용자는 크로스 플랫폼 프로젝트로 작업하는 경우, 그것은 해야 할
core.autocrlf=trueWindows 시스템과core.autocrlf=input유닉스 시스템에 대해. - Windows 사용자가 Windows 프로젝트 만 작업하는 경우 둘 다
core.autocrlf=true또는core.autocrlf=false. 그러나이core.autocrlf=input경우 문제가 발생합니다.
Unix 사용자 (Linux / Mac OS)
- 유닉스 사용자가 크로스 플랫폼 프로젝트로 작업하는 경우, 그것은 해야 할
core.autocrlf=trueWindows 시스템과core.autocrlf=input유닉스 시스템에 대해. - Unix 사용자가 Unix 프로젝트 만 작업하는 경우 둘 다
core.autocrlf=input또는core.autocrlf=false. 그러나이core.autocrlf=true경우 문제가 발생합니다.
동일한 OS 사용자의 경우
- 순수 Windows 프로젝트 또는 순수 Unix 프로젝트의 경우
core.autocrlf=false.
참고URL : https://stackoverflow.com/questions/4181870/git-on-windows-what-do-the-crlf-settings-mean
'program story' 카테고리의 다른 글
| 기존 모델의 변경 사항을 반영하도록 django 데이터베이스 업데이트 (0) | 2020.11.06 |
|---|---|
| 파일 압축 해제 (0) | 2020.11.05 |
| 크로스 브라우저 확장 API? (0) | 2020.11.05 |
| Scala에서 ::와 :::의 차이점은 무엇입니까? (0) | 2020.11.05 |
| 문자열 리터럴 풀은 문자열 개체에 대한 참조 모음이거나 개체 모음입니다. (0) | 2020.11.05 |