본문 바로가기

[ Team ] 공통

[ Team 공통] git 운영체제별 개행문자 통일하기

안녕하세요. 홍성권입니다.

🤗오늘은 저번부터 포스팅하려고 했던 개행문자에 대해 정보를 드리려 합니다.

어제도 저희 commit 과정 같이 지켜보는데 james nano편집기 끝 문장마다 ^m이라는 글자가 생겨 당황했었잖아요??

이는 운영체제마다 사용하는 개행문자가 다르기 때문에 일어나는 문제입니다.

mac, unix에서는 LF(Line Feed, \n, 커서 위치를 맨 앞으로 이동)로 

windows에서는 CR(Carriage-Return, \r, 현재 위치에서 다음 라인으로 이동)과 LF를 같이 사용한다고 해요.

이렇게 차이가 있다보니 서로 파일을 주고 받을 때 어제와 같은 상황이 일어난 것입니다.

구체적으로 windows에서 전달받은 파일을, mac이나 unix에서 열어볼 때 LF만을 개행문자로 보기 때문에 CR을 특수문자로 인식하고 ^m이라는 글자를 남긴다고  하네요.

이 때문에 리눅스 ^m제거와 관련된 다양한 글을 찾을 수 있었습니다.

근데 사실 제가 이 글을 쓰려고 하는 부분은 어제와 같은 문제라기 보다는 저번 pre project와 관련된 이유에서입니다.

똑같은  내용임에도, 모든 파일이 변경된 것처럼 커밋 내용이 뜨는 이유가 바로 개행문자가 다르기 때문에 커밋 내용을 생성한 것이 아닌가 추측해요.

오늘 제가 포스팅 하려고 하는 부분은 git에서 해당 부분을 통일하고자 하는 부분인데요. 

core.eol
Sets the line ending type to use in the working directory for files that are marked as text (either by having the text attribute set, or by having text=auto and Git auto-detecting the contents as text). Alternatives are lf, crlf and native, which uses the platform’s native line ending. The default value is native. See gitattributes[5] for more information on end-of-line conversion. Note that this value is ignored if core.autocrlf is set to true or input.

git에서는 이와 관련된 옵션을 core.eol이라는 명령어를 통해 제공합니다.

제공하는 값으로는 native와, lf, crlf가 있네요.

git config core.eol native
// native는 해당 운영체제에 따라 개행문자를 적용한다고 적혀있네요. 요게 default입니다.

git config core.eol lf
// 개행문자를 lf로 설정합니다.

git config core.eol crlf
// 개행문자를 crlf로 설정합니다.

근데 git에서 인용문을 보면 마지막 문장에 "Note that this value is ignored if core.autocrlf is set to true or input."라는 게 있잖아요?? 이를 통해서 core.autocrlf라는 옵션 또한 제공함을 유추해볼 수 있겠습니다!

core.autocrlf
Setting this variable to "true" is the same as setting the text attribute to "auto" on all files and core.eol to "crlf". Set to true if you want to have CRLF line endings in your working directory and the repository has LF line endings. This variable can be set to input, in which case no output conversion is performed.

이 내용을 해석해보면 로컬 작업 환경엔 CRLF 개행문자를 적용하고 싶고, repository가 LF 개행문자를 가지고 있으면 true로 설정하라고 하네요. 처음에는 이 문장이 무슨 뜻인지 몰라 레퍼런스를 찾아봤는데, commit 할 때는 LF로, checkout 할 때는 CRLF로 바꿔준다라고 합니다!

 

Git - Git 설정하기

8.1 Git맞춤 - Git 설정하기 지금까지 Git이 어떻게 동작하고 Git을 어떻게 사용하는지 설명했다. 이제 Git을 좀 더 쉽고 편하게 사용할 수 있도록 도와주는 도구를 살펴본다. 이 장에서는 먼저 많이

git-scm.com

 

따라서 windows의 경우엔

git config --global core.autocrlf true

linuxd와 mac의 경우엔

git config --global core.autocrlf input

를 사용하면 git으로 협업 시 개행문자 때문에 생기는 어려움을 피할 수 있을 것이라 생각합니다!

블로그 글을 작성하면서 참고한 레퍼런스들 첨부해드릴테니 더 자세한 내용은 해당 포스팅 내용 참고하시면 공부하시는데 많은 도움 될 거 같아요 😊😊

 

git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기

 

www.lesstif.com

 

 

Git - git-config Documentation

When using the deprecated [section.subsection] syntax, changing a value will result in adding a multi-line key instead of a change, if the subsection is given with at least one uppercase character. For example when the config looks like [section.subsection

git-scm.com

 

 

git autocrlf로 개행문자 통일하는 법

아시다시피 윈도우즈에서는 캐리지 리턴(Carriage Return, CR, \r)과 라인 피드(Line Feed, LF, \n)를 개행문자로 사용해 \r\n이 개행문자가 되고, 리눅스 계열과 MacOS에서는 라인 피드만 사용해 \n이 개행문

director-joe.kr

 

프론트의 경우 prettierrc와 eslint설정 때문에 살짝 에러가 날 수 있을 거라 생각해요. 만약 발생한다면 아래 블로그들도 확인 한 번 해보심 좋을 거 같아요!

 

Git 줄 시퀀스 충돌

맥이나 리눅스에서 작업한 파일은 기본적으로 줄 시퀀스가 LF로 설정되어 있고 Git 저장소(repository)에 push할 때 LF로 저장된다. 하지만 LF로 설정된 파일이 있는 저장소를 클론해서 윈도우에서 작

velog.io

 

 

LF와 CRLF의 차이 (Feat. Prettier)

나는 주로 윈도우즈에서 코딩을 한다. (윈도우즈에서 코딩을 하는 것을 미리 알리는 이유는 이 에러의 원인과 관련이 있다.) 아무튼 내가 윈도우즈를 사용하는 이유는 회사 컴퓨터가 윈도우즈고

velog.io

 

그리고 백엔드 분들은 git 설정 이전, intelliJ에서부터 개행문자를 설정할 수 있더라구요! 관련 레퍼런스도 첨부할게요 😁

 

[JetBrains]에디터의 라인 분리자(Line separator) 기본설정 변경하기(윈도우, 구맥, 유닉스 계열)

JetBrain에디터는 여러종류가 있다. 그래서 아래의 모든 에디터에서 해당 포스팅을 참조할 수 있음을 알린다. - AppCode : apple에서 사용하는 swift, objectiv-c 전용 에디터 - CLion : C, C++ 전용 에디터 - GoL..

kamang-it.tistory.com

 

'[ Team ] 공통' 카테고리의 다른 글

[공통] Jira Issue & Commit  (1) 2022.09.20