티스토리 뷰

문제

  • 개발환경 : MacOS 12.6 (M1)

파이참 내장된 commit 탭에서 staged files을 commit 하려고 하니 다음과 같은 에러 발생

 

 

 

시도해본 것들

내가 생각하는 핵심 키워드

git Line Seperators Warning
commit CRLF line separators

 

시도1. Terminal 에서 git add, git commit 명령어로 똑같이 작업

$ git status 

On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        renamed:    styles.css -> static/styles.css
        renamed:    index.html -> templates/index.html

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .idea/
        app.py


$ git commit -m "Feat: html, css 파일 이동"

 

 

해결

Terminal 에서 git cli 로 진행하면 문제 없이 해결

⇒ 그러나 왜 이러한 원인이 발생했는지 궁금해서 찾아봄

 

 

알게 된 것

CRLF

텍스트 파일의 개행(줄바꿈) 을 나타내는 컴퓨터용 표현(코드) 방식

 

- CR = 캐리지 리턴 (\r, 16진수로 0x0D, 소수 10진수로 13) — 다음 줄 없이 줄 시작점으로 커서가 이동, 수평이동

- LF = 라인 피드 (\n, 16진수로 0x0A, 소수 10진수로 10) — 커서가 줄 시작점으로 돌아가지 않고 다음 줄로 내려가며 이동, 수직이동

 

CR에 뒤를 이어 LF가 나오고 (CRLF, \r\n, or 0x0D0A) 커서는 다음 줄로 넘어간 다음 줄의 시작점으로 간다.

 

왜 CR과 LF가 따로 있는지?

- 옛날 타자기는 줄을 넘어가려면, 캐리지를 맨 오른쪽에서 맨 왼쪽으로 이동한 다음 아랫줄로 넘어가야하는 절차가 있었음

- 하지만 요즘에는 크게 상관 없어서 CRLF 같이 쓰임

 

단, 운영체제마다 개행문자를 나타내는 방식이 다름

- Windows : CR+LF (\r\n)로 표현, 구식 장치와 호환될 수 있음, 용량이 더 커지지만 1바이트 차이가 큰 문제는 아님

- Unix : LF(\n)

- 구형 Mac : CR (\r) ⇒ 요즘에는 LF(\n)로 통일

 

 

결론

Pycharm에서 commit메시지에 CRLF가 포함되어 있었고, 따라서 이를 어떻게 인식해야 할지 물어본 것임

터미널에서 cli로 하면 CRLF(\r\n)이 없이 진행되어 문제가 없었던 것.

터미널에서 작업해도 되고, Fix and Commit 을 눌러서도 해결 가능함

즉, 문제 상황과 같은 팝업이 인텔리제이나 파이참에서 뜨면 ‘Fix and Commit’ 눌러도 상관 없음

Git이나 다른 환경에서는 일반적으로 LF를 쓰고 Windows에서만 CRLF를 사용하기 때문에 굳이 CRLF를 고집할 필요가 없음.

Fix and Commit을 누르면 커밋 전에 자동으로 줄끝을 LF로 변환하도록 git config가 설정됨

 

 

참고자료

'TIL, WIL' 카테고리의 다른 글

0119 TIL : JavaScript 함수, 객체  (0) 2023.01.20
0118 TIL : JavaScript 특징, 기본 문법  (0) 2023.01.18
0109 - 0115 WIL : API / KPT  (0) 2023.01.15
댓글