sitelink1 https://www.lesstif.com/pages/viewpage.a...d=20776404 
sitelink2  
sitelink3  

익히 알다시피 Windows 에서는  line ending으로 CR(Carriage-Return, \r)과 LF(Line Feed, \n)을 사용하고 Unix 나 Mac OS 는 LF 만 사용한다.

이는 상당히 골치아픈 문제를 발생시킨다. 실제 코드는 변경된 게 없는데 소스의 CR/LF 때문에 변경으로 착각하여 commit 을 하게 될 수 있으며 변경 로그를 보거나 merge 마다 문제가 될 소지가 있다.

이런 문제를 방지하기 위해 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 --global --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 으로 사용한다.

 

방법 #1 - autocrlf 설정 사용

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

 

 

방법 #2 - .gitattributes 사용

git 은 텍스트 파일의 속성을 .gitattributes 파일을 통해 설정할 수 있으며 여기에는 crlf 처리도 지정할 수 있다. .gitattributes 를 저장소에 커밋하면 다른 클라이언트는 별도의 설정이 필요없다.

 

 

 

# Auto detect text files and perform LF normalization

*        text=auto

 

*.cs     text diff=csharp

*.java   text diff=java

*.html   text diff=html

*.css    text

*.js     text

*.sql    text

 

*.csproj text merge=union

*.sln    text merge=union eol=crlf

 

*.docx   diff=astextplain

*.DOCX   diff=astextplain

 

# absolute paths are ok, as are globs

/**/postinst* text eol-lf

 

# paths that don't start with / are treated relative to the .gitattributes folder

relative/path/*.txt text eol-lf

 

 

 

만약 git client 로 egit 을 사용하면 .gitattributes 를 읽지 못하므로 제대로 동작 안 하므로 방법 #1 을 사용해야 한다.

 

 

Ref

 


 

 

 

 

 

Git for Windows 프로그램 설치시 line feed(개행)에 대한 설정이 가능하다

 

101615_0934_GitGitI1.png

Git for Windows 를 설치하면 다음과 같이 설치가 진행하게 된다.

 

101615_0934_GitGitI2.png

 

다음의 화면이 뜨게 되면 당황하지말자 ㅋ

 

101615_0934_GitGitI8.png

 

설치화면 진행중 위와 같은 화면이 나타나면

맨 위의 “Checkout Windows-style, commit Unix-style line endings” 를 선택해야 한다.

 

혹시나 Git for Windows가 이미 설치가 되어 있는 경우 다음과 같은 커맨드 명령어로 설정을 변경 할 수 있다.

 

캡처.JPG

 

 

 

 

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
75 [VSS] Using Visual SourceSafe – How to backup & restore VSS DB file 황제낙엽 2016.07.12 7519
74 SVN 관련 FAQ [118] 황제낙엽 2006.01.16 6666
73 Subclipse - Subversion Eclipse Plugin (SVN) 황제낙엽 2007.04.05 2969
72 [SVN] VisualSVN Server 의 저장소 백업 및 복원 황제낙엽 2016.11.04 2761
71 SVN 사용시 revision 번호로 버전관리하는 방법 황제낙엽 2012.08.28 586
» git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기 file 황제낙엽 2016.09.29 572
69 버전관리 툴 ( CVS, SVN, VSS, BitKeeper, ClearCase ... ) file 황제낙엽 2005.11.11 548
68 VisualSVN svn 프로토콜 열기 (Open SVN protocol on VisualSVN) file 황제낙엽 2018.11.22 518
67 SubVersion 설치 및 활용 (시리즈 강좌 - 03) 황제낙엽 2008.06.06 479
66 [VisualSVN] SSL 인증서 합치기 file 황제낙엽 2019.03.29 437
65 Previous operation has not finished; run 'cleanup' if it was interrupted file 황제낙엽 2018.04.02 435
64 윈도우에서 깃(git) 서버 설치하기 file 황제낙엽 2016.05.17 404
63 [VSS] How to force logout of all users on VSS? 황제낙엽 2016.07.12 395
62 윈도우에서 TortoiseSVN 아이콘 오버레이가 표시되지 않는 문제 file 황제낙엽 2019.02.12 388
61 git clone [bare/mirror] 정리 file 황제낙엽 2021.09.03 382
60 tortoise, subversion 자동 로그인 캐시 제거(로그아웃) 황제낙엽 2020.02.06 358
59 [SVN] VisualSVN 계정 관리 방법 file 황제낙엽 2017.05.26 352
58 태그(Tag) 생성 file 황제낙엽 2016.09.29 344
57 [VisualSVN] Importing an SSL certificate with private key 황제낙엽 2019.03.29 265
56 10분만에 파악해보는 What is GitHub (Hello World) file 황제낙엽 2016.10.04 236