`.gitattributes` 파일에서`text = auto`의 목적은 무엇입니까?


129

주로 .gitattributes파일이 * text=auto있습니다. text=auto그 파일 의 목적은 무엇입니까 ?

답변:


77

에서 워드 프로세서 :

.gitattributes(또는 .git/info/attributes) 파일의 각 줄 은 다음과 같은 형식입니다.

pattern attr1 attr2 ...

여기서 패턴은입니다 *. 이는 모든 파일을 의미하고 속성은 text=auto입니다.

무엇을 text=auto합니까? 설명서에서 :

텍스트가 "자동"으로 설정되면 경로가 자동 줄 끝 정규화로 표시됩니다. Git이 내용이 텍스트라고 결정하면 체크인시 줄 끝이 LF로 정규화됩니다.

활성화되지 않은 경우 기본 동작은 무엇입니까?

불특정

텍스트 속성을 지정하지 않으면 Git은 core.autocrlf 구성 변수를 사용하여 파일을 변환해야하는지 여부를 결정합니다.

무엇을 core.autocrlf합니까? 문서에서 :

   core.autocrlf

이 변수를 "true"로 설정하는 것은 텍스트 파일이 정규화되지 않는다는 점을 제외하고 모든 파일에서 text 속성을 "auto"로 설정하는 것과 거의 동일합니다. 리포지토리에 CRLF가 포함 된 파일은 건드리지 않습니다. 저장소에 정규화 된 줄 끝이없는 경우에도 작업 디렉토리에 CRLF 줄 끝을 가지려면이 설정을 사용하십시오. 이 변수는 입력으로 설정 될 수 있으며,이 경우 출력 변환이 수행되지 않습니다.

이 모든 것이 진흙처럼 분명하다고 생각한다면, 당신은 혼자가 아닙니다.

* text=auto내 말로 하는 일은 다음과 같습니다 . 누군가 파일을 커밋 할 때 Git은 해당 파일이 텍스트 파일인지 아닌지 추측하고, 그렇다면 파일을 모든 CR + LF 바이트가 LF 바이트로 대체하는 파일 버전을 커밋합니다. 작업 트리의 파일 모양에 직접 영향을 미치지 않으며 파일을 체크 아웃 할 때 LF 바이트를 CR + LF 바이트로 변환하는 다른 설정이 있습니다.

추천:

난 것입니다 하지 두는 것이 좋습니다 * text=auto.gitattributes파일. 대신 다음과 같은 것이 좋습니다.

*.txt text
*.html text
*.css text
*.js text

이것은 텍스트 파일 인 파일을 명시 적으로 지정합니다.이 파일은 오브젝트 데이터베이스에서 CRLF를 LF로 변환하지만 반드시 작업 트리에서는 아닙니다. 우리는 repo를 가지고 있었고 * text=autoGit은 이미지 파일이 텍스트 파일이라고 잘못 추측하여 객체 데이터베이스에서 CR + LF 바이트를 LF 바이트로 대체하여 파일을 손상시킵니다. 그것은 디버깅하기에 재미있는 것이 아닙니다.

을 사용해야하는 * text=auto경우을 첫 번째 행으로 두어 .gitattributes이후 행이이를 대체 할 수 있도록하십시오. 이것은 점점 인기있는 관행이되고있는 것 같습니다.


2
왜 모든 사람이 LF를 보통이라고 부르지 만 CRLF는 아닌가? 그것을 증명할 어떤 언급이 있습니까?
Yousha Aleayoub

1
@YoushaAleayoub 무슨 뜻인가요?
Flimm

1
당신이 경우 @YoushaAleayoub이 everyone에 의미 git-scm, 그것은 그들이 * nix에서 스크립트 패키지를 개발하고, 따라서 * 괜찬아 개행 문자가 사용하고 있기 때문에 아마 정상 .
Justin Moh

4
@YoushaAleayoub LF는 "정상적인"b / c로 간주되며 많은 개발 도구에서 일반적입니다. git-scm* nix에서 나온 것과 같은 인기있는 개발 도구 . MacOS는 LF를 사용합니다. Windows 만 (주류 OS 만 고려) CRLF를 사용합니다. 이로 인해 Windows에서 * nix 도구를 사용하는 개발자와 파일을 교환 할 때 모든 사람이 더 어려워집니다. 왜 CRLF를 참조하십시오 .
Roi Danton

2
@Flimm, 당신은 차이 설명 할 수 *.txt text=auto*.txt text하세요? 위의 예제에서 4 줄은 모두 파일 확장자 직후가 text=auto아니라고 생각했습니다 text. 예를 들어 KiCad 풋 프린트 파일 ( ".kicad_mod"확장자)은 gitattributes 파일 *.kicad_mod text=auto( kicad-pcb.org/libraries/klc/G1.7 ) 에서이 줄을 사용하여 정규화됩니다 .
Gabriel Staples

64

줄 끝을 정규화합니다. 출처 : Kernel.org

텍스트가 "자동"으로 설정되면 경로가 자동 줄 끝 정규화로 표시됩니다. git이 내용이 텍스트라고 결정하면 체크인시 줄 끝이 LF로 정규화됩니다.

라인 끝 정규화를 시행하는 소스 코드 관리 시스템과 상호 운용하거나 저장소의 모든 텍스트 파일을 정규화하려는 경우 대신 모든 파일에 대해 텍스트 속성을 "자동"으로 설정해야합니다.

이것은 git이 텍스트로 간주하는 모든 파일이 저장소에서 정규화 된 (LF) 줄 끝을 갖도록합니다.


12
정규화 된 줄 끝이 무슨 뜻입니까?
Fizer Khan

14
When a text file is normalized, its line endings are converted to LF in the repository.
Dave Zych

11
중요한 것은 이것이 로컬 코어를 덮어 쓰는 것입니다. 컴퓨터의 autocrlf 설정은 @Daniel Jomphe의 훌륭한 답변을
spankmaster79

1
git이 저장소에 체크인 된 파일로 $ % #을하지 않으면 끔찍합니다. . 나는 "이것은 해킹 IMO 교활한 자식이며,이 중 어느 것도 당신의 파일 중 하나라도 바이트를 변경하지 않습니다 SLM, 억지로, MSBUILD, 소스 저장소, TFS, SVM와 함께 일했습니다 그것은 나에게 많은 고통을 발생했습니다.
Vance McCorkle

1
결제시 일어나는 일은 이야기의 절반에 지나지 않습니다. 체크 아웃시 줄 끝이 LF창에서도 그대로 유지된다고 말하는 것이 옳 습니까?
Anthony

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.