Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- go언어
- JavaScript
- Python
- c++
- Linux
- FOR
- package
- tcp
- mutex
- json
- 영화
- Sync
- write
- C
- window
- Golang
- channel
- 책
- windows
- API
- 리뷰
- Close
- Callback
- GO 언어
- http
- bitcoin
- install
- range
- go
- File
Archives
- Today
- Total
Code Habit
Git ) SourceTree의 Line-ending 문제 본문
Windows에서는 line ending으로 CR(Carriage-Return, \r)과 LF(Line Feed, \n)을 사용하고 Unix 나 Mac OS 는 LF만 사용한다. 이로 인해 실제 코드는 변경된게 없는데 변경으로 착각하는 문제가 발생할 수 있다.
이런 문제를 방지하기 위해 OS가 달라도 문제가 없도록 crlf 처리 방법을 결정해야 한다.
Git 설정
- core.eof : git이 line ending을 어떻게 처리하는지 관련된 항목이다. 세 가지 설정을 할 수 있다.
- core.eol = native : 기본 설정. 시스템에서 line ending을 처리하는 방법에 따른다. windows에서는 CRLF를 사용하고 Linux, OS X는 LF만 사용한다.
- core.eol = crlf : CRLF를 line ending으로 사용한다.
- core.eol = lf : LF를 line ending으로 사용한다.
설정은 다음 명령어로 수행할 수 있다.
// 설정
$ git config --global core.eol native
// 설정 확인
$ git config --golbal --list|grep core.eol
- core.autocrlf
git은 저장소 메타 데이타 디렉터리인 .git 폴더에 모든 이력 데이타를 갖고 있다. 이력 데이타는 key/value 형식의 데이타베이스이며 core.autocrlf는 text file을 git object database 에 checkin, checkout할 때 어떻게 처리할지를 설정하는 변수이다.
- core.autocrlf = false : 기본 설정이다. 파일에 CRLF를 썼든 LF를 썼든 git은 상관하지 않고 파일 그대로 checkin, checkout한다. 이 설정은 line ending이 다른 OS에서는 text file이 변경되었다고 나오므로 위에서 언급한 여러가지 문제가 발생할 수 있다.
- core.autocrlf = true : text file을 object database에 넣기 전에 CRLF를 LF로 변경한다.
- core.autocrlf = input : LF를 line ending으로 사용한다.
OS 별 CRLF 차이로 인한 문제를 막기 위해 OS 별로 다음과 같이 crlf 처리 방법을 설정하는 걸 권장한다.
Windows
윈도우에서는 CRLF를 사용하므로 저장소에서 가져올 때 LF를 CRLF로 변경하고 저장소로 보낼 때는 CRLF를 LF로 변경하도록 true로 설정한다.
git config --global core.autocrlf true
Linux, Mac OS
리눅스, 맥, 유닉스는 LF만 사용하므로 input으로 설정한다.
git config --global core.autocrlf input
* 참고 문서 : https://haru.kafra.kr/22www.lesstif.com/gitbook/git-crlf-20776404.html