왜 코어를 써야 하죠?autocolf=git에 참입니까?
Windows와 OS X 모두에서 액세스할 수 있는 Git 저장소가 있으며 CRLF 줄 끝이 있는 일부 파일이 이미 포함되어 있는 것으로 알고 있습니다.제가 알기로는 두 가지 방법이 있습니다.
트
core.autocrlffalse있어요, 통.여기에 있는 지침(GitHub의 도움말 페이지에 있는 에코)에 따라 저장소를 LF 줄 끝만 포함하도록 변환한 다음 설정합니다.
core.autocrlftrue및 윈우즈에서inputOS X서 할과 같은입니다.- 이진 git 속성으로 올바르게 표시되지 않았습니다.
- CRLF와 LF를 모두 포함하고 있습니다
그들은 부패할 것입니다.리포지토리에 이러한 파일이 있을 수 있습니다.
그럼 왜 내가 Git의 라인 엔드 변환을 끄면 안 되는 거지?웹상에 있는 것에 대한 많은 모호한 경고들이 있습니다.core.autocrlf꺼짐으로 인해 문제가 발생하지만 구체적인 문제는 거의 없습니다. 지금까지 kdiff3가 CRLF 종료를 처리할 수 없다는 것(나에게는 문제가 되지 않음)과 일부 텍스트 편집기에 줄바꿈 문제가 있다는 것(나에게도 문제가 되지 않음)이 있습니다.
저장소는 회사 내부에 있으므로 자동으로 설정하거나 줄 바꿈 요구 사항이 다른 사용자와 공유할 걱정이 없습니다.
줄 끝을 그대로 두는 것에 대해 제가 모르는 다른 문제가 있습니까?
을 설정하는 인 이유autocrlftrue다음과 같습니다.
- , 피하다, 피하다, 피하다, 피하다, 피하다, 피함
git status을 든모modifiedUnix 기반 EOL Gitrepo를 Windows 버전으로 복제할 때 수행되는 자동 EOL 변환 때문입니다(예를 들어 문제 83 참조). - 코딩 도구는 파일에 있는 기본 EOL 스타일에 따라 달라집니다.
- 예를 들어, 네이티브 EOL을 탐지하기 위해 하드 코딩된 코드 생성기
- 기본 EOL을 탐지하기 위해 regeexport 코드가 설정된 다른 외부 배치(사용자 레포 외부)
- 일부 Eclipse 플러그인은 플랫폼에 상관없이 CRLF로 파일을 생성할 수 있다고 생각하는데, 이는 문제가 될 수 있습니다.
- Notepad.exe를 사용하여 코드화합니다(Notepad가 EOL 문자를 인식하는 Windows 10 2018.09+를 사용하지 않는 경우).
네이티브 EOL을 처리해야 하는 특정 치료법을 볼 수 없는 한, 다음으로 떠나는 것이 좋습니다.git config --global core.autocrlf false).
이 구성은 로컬 구성입니다(구성이 repo에서 repo로 푸시되지 않기 때문에).
해당 repo를 복제하는 모든 사용자에 대해 동일한 구성을 원하는 경우, 파일의 속성을 사용하여 "git를 사용한 최고의 처리 전략은 무엇입니까?"를 확인하십시오.
예:
*.vcproj text eol=crlf
*.sh text eol=lf
참고: git 2.8(2016년 3월)부터 병합 마커는 더 이상 CRLF 파일에 LF(혼합 끝)를 도입하지 않습니다.
"Git가 "<<<<HEAD" 병합 라인에서 CRLF를 사용하도록 설정"을 참조하십시오.
저는 a입니다.NET 개발자이며 수년간 Git 및 Visual Studio를 사용해 왔습니다.제가 강력하게 추천하는 것은 줄 끝을 참으로 설정하는 것입니다.또한 저장소의 수명이 다할 때까지 가능한 한 빨리 작업을 수행합니다.
그렇긴 하지만, 나는 Git이 내 대사의 결말을 바꾸는 것이 싫습니다.소스 제어는 내가 수행하는 작업만 저장하고 검색해야 하며 수정해서는 안 됩니다.절대로. 하지만 그렇습니다.
만약 당신이 모든 개발자를 true로 설정하지 않는다면, 결국 한 개발자가 true로 설정하게 될 것입니다.레포에서 모든 파일의 줄 끝이 LF로 변경되기 시작합니다.또한 사용자가 잘못된 체크아웃으로 설정하면 Visual Studio에서 경고를 표시하고 변경을 요청합니다.당신은 두 가지 일이 매우 빠르게 일어날 것입니다.첫째, 여러분은 점점 더 많은 경고를 받게 될 것이고, 여러분의 팀이 커질수록 더 많은 경고를 받게 될 것입니다.두 번째이자 더 나쁜 것은 모든 수정된 파일의 모든 줄이 변경되었음을 보여준다는 것입니다(모든 줄의 끝은 실제 사용자에 의해 변경되기 때문입니다).최종적으로, 당신은 더 이상 당신의 보고서의 변경사항을 안정적으로 추적할 수 없게 될 것입니다.모든 사람을 거짓으로 유지하려고 하는 것보다 모든 사람을 진실로 유지하는 것이 훨씬 쉽고 깨끗합니다.신뢰할 수 있는 소스 제어가 하지 말아야 할 일을 하고 있다는 사실을 감수하는 것은 끔찍한 일입니다.전혀.
업데이트 2:
Xcode 9는 파일의 현재 줄 끝을 무시하고 대신 파일에 줄을 삽입할 때 기본 줄 끝 설정을 사용하여 줄 끝이 혼합된 파일을 생성하는 "기능"을 가지고 있습니다.
저는 이 버그가 Xcode 7에 존재하지 않았다고 확신합니다. Xcode 8에 대해서는 잘 모릅니다.좋은 소식은 Xcode 10에서 고정된 것으로 보인다는 것입니다.
한동안 이 버그는 제가 질문에서 언급한 코드베이스에 약간의 재미를 주었습니다 (오늘날까지 사용하는 것).autocrlf=false), 그리고 많은 "EOL" 커밋 메시지로 이어졌고 결국 제 글을 쓰는 기트로 이어졌습니다.pre-commit혼합 라인 끝단을 소개하는 후크를 사용하여 확인합니다.
업데이트:
참고: VonC가 언급했듯이 Git 2.8부터 병합 마커는 Windows 스타일 파일에 Unix 스타일의 줄 끝을 도입하지 않습니다.
원본:
이 설정에서 발견한 한 가지 문제는 병합 충돌이 있을 때 차이점을 표시하기 위해 추가하는 git 줄은 Windows 줄 끝이 없으며, 파일의 나머지 부분이 Windows 줄 끝이 있더라도 다음과 같은 혼합 줄 끝이 있는 파일로 끝날 수 있다는 것입니다.
// Some code<CR><LF>
<<<<<<< Updated upstream<LF>
// Change A<CR><LF>
=======<LF>
// Change B<CR><LF>
>>>>>>> Stashed changes<LF>
// More code<CR><LF>
이것은 우리에게 아무런 문제를 일으키지 않습니다. (두 유형의 줄 끝을 모두 처리할 수 있는 어떤 도구도 혼합 줄 끝을 처리하는 것이 합리적일 것이라고 생각합니다. 물론 우리가 사용하는 모든 도구도 마찬가지입니다.) 하지만 이는 주의해야 할 사항입니다.
우리가* 발견한 또 다른 것은, 사용할 때git diffWindows 줄 끝이 있는 파일의 변경 내용을 보려면 추가된 줄에 캐리지 리턴이 다음과 같이 표시됩니다.
// Not changed
+ // New line added in^M
+^M
// Not changed
// Not changed
그것은 실제로 "이슈"라는 용어를 쓸 가치가 없습니다.
나를 위해.
.git 특성 파일을 편집합니다.
더하다
*.dll binary
그러면 모든 것이 잘 됩니다.
프로젝트에서 우리는 autocolf를 입력값으로 설정할 필요가 있다고 선언했습니다.여기에 관심이 있는 이유가 있습니다.
- 프로젝트가 Linux/Unix 환경에서 실행되고 개발자가 Windows에서 코드를 작성하고 있습니다.푸시 중에 CRLF가 자동으로 LF로 변환되므로 유닉스 서버에서 Gitrepo를 체크아웃하기만 하면 바로 사용할 수 있습니다.
- 개발자가 WinSCP를 사용하여 Windows 시스템에서 서버로 구성을 수동으로 업로드하는 경우도 있습니다.이로 인해 Unix 시스템에서 CRLF 줄이 종료되고 앱이 시작되지 않습니다."입력" 값은 이러한 경우의 수를 부분적으로 제거합니다.
얼마 전에 우리가 직면했던 문제들:
- DEV의 기계에서 줄 끝이 CR(CRLF가 아님)로 설정되어 있으면 푸시 중에 LF로 변환되지 않고 GIT 저장소에 CR로 유지됩니다.라인 끝 부분을 철저히 점검합니다.
언급URL : https://stackoverflow.com/questions/2825428/why-should-i-use-core-autocrlf-true-in-git
'codememo' 카테고리의 다른 글
| 현재 및 미래의 모든 리포지토리에 Git 사후 커밋 후크 적용 (0) | 2023.05.13 |
|---|---|
| 빈 값 또는 null 값을 확인하는 가장 좋은 방법 (0) | 2023.05.13 |
| 배포 파일로 npm 패키지를 게시하려면 어떻게 해야 합니까? (0) | 2023.05.13 |
| Angular2 재료 대화 상자에 문제가 있습니다. @NgModule.entryComponents에 추가했습니까? (0) | 2023.05.13 |
| SQL에서 쉼표로 구분된 결과 (0) | 2023.05.13 |