나는 어떤 작업에 대해서도 줄 끝을 변경하지 않도록 자식을 얻으려고합니다. 불행히도, 그것은 중요하지 않은 것 같습니다. 이 동작을 비활성화하기위한 다양한 메커니즘이있는 다음 테스트 케이스로 축소했습니다.
- 두 대의 컴퓨터로 시작 (Windows 컴퓨터 = A, Linux 컴퓨터 = B)
- 두 컴퓨터에서 :
git config --global core.autocrlf false
- 두 컴퓨터에서 :
git config --global core.eol crlf
(경우에 따라)
- A에 새 저장소를 만듭니다. 빈 폴더에서 :
git init --shared
(그런 다음 생성 된.git
디렉토리 숨기기 해제 ).gitignore
저장소에 새 파일 만들기.gitattributes
한 줄로 저장소에 새 파일 을 만듭니다 .* -text
git add .
,git commit -m "initial commit"
예를 들어 this .git branch master_recv
- 리모컨 추가
document.txt
CRLF를 포함하는 저장소에 새 파일 만들기- 커밋 :
git add -A
, 다음git commit -m "<something>"
- A
document.txt
에는 여전히 CRLF가 포함되어 있습니다 (그리고이를 삭제하고로 재설정--hard
하면 CRLF가있는 버전 이 반환 됨).
- 전체 디렉터리를 컴퓨터 B로 SCP
- 새 파일 추가
new file
CRLF가 포함 - 커밋 :
git add -A
, 다음git commit -m "<something>"
- B
document.txt
와 Bnew file
모두 여전히 CRLF를 포함합니다.
- B의 마스터를 A로 끌어옵니다.
git pull <remote> master:master_recv
- A
document.txt
가 LF로 변경되었습니다. 추가 된 파일new file
에는 LF도 포함되어 있습니다.
B가 Windows 시스템이면 문제가 발생하지 않습니다.
답변
프로젝트 안에 .gitattributes
파일 이 있어야 합니다. 대부분의 경우 다음과 같이 표시됩니다 (또는이 스크린 샷 ).
# Handle line endings automatically for files detected as text
# and leave all files detected as binary untouched.
* text=auto
# Never modify line endings of our bash scripts
*.sh -crlf
#
# The above will handle all files NOT found below
#
# These files are text and should be normalized (Convert crlf => lf)
*.css text
*.html text
*.java text
*.js text
*.json text
*.properties text
*.txt text
*.xml text
# These files are binary and should be left untouched
# (binary is macro for -text -diff)
*.class binary
*.jar binary
*.gif binary
*.jpg binary
*.png binary
자동 처리를 비활성화 * text=auto
하려면 * text=false
로 변경 하십시오 ( 스크린 샷 ).
이렇게 :
프로젝트에 .gitattributes 파일이 없으면 git 구성에 따라 줄 끝이 설정됩니다. git 구성을 변경하려면 다음을 수행하십시오.
이 디렉토리의 구성 파일로 이동하십시오.
1) C : \ ProgramData \ Git \ config
2) Notepad ++ (또는 원하는 텍스트 편집기)에서 구성 파일을 엽니 다.
3) “autocrlf =”를 false로 변경하십시오.
답변
한 가지 간단한 해결책은 다음과 같습니다.
- 모든 저장소에 대해 core.autocrlf가 false로 설정되어 있는지 확인하십시오 .
git config --global core.autocrlf false
- 저장소를 다시 복제하고 EOL 변환이 수행되지 않았는지 확인하십시오.
- 또는 Git 2.16 (Q1 2018) 이후 현재 저장소를 유지하고
git add --renormalize .
자동으로 수행되는 변환 이 있으면 리포지토리 내에 .gitattributes
core.eol
지시문 이 있음 을 의미합니다 .
함께 힘내 2.8 이상 (2016 월) 여전히와 EOL 변환이 있는지 확인 :
git ls-files --eol
답변
나는 그것을 알아. SCP 프로그램이 줄 끝을 변환하는 것 같습니다. 의도적으로 LF 엔딩으로 파일을 만들고 다운로드 할 때 CRLF로 나타나는 것을 관찰했을 때 이것을 발견했습니다.
이것이 나에게 해결책 이었기 때문에 나는이 대답을 받아들이고 있지만 미래의 사람들은 더 일반적인 해결책을 위해 다른 대답을 참조해야합니다.
답변
에서 gitattributes (5) 매뉴얼 페이지 “효과”항목
text
이 속성은 라인 끝 정규화를 활성화하고 제어합니다. 텍스트 파일이 정규화되면 해당 줄 끝이 저장소에서 LF로 변환됩니다. 작업 디렉토리에서 사용되는 줄 끝 스타일을 제어하려면
eol
단일 파일 의 속성과core.eol
모든 텍스트 파일 의 구성 변수를 사용하십시오.
Set
경로에 텍스트 속성을 설정하면 줄 끝 정규화가 활성화되고 경로가 텍스트 파일로 표시됩니다. 콘텐츠 유형을 추측하지 않고 줄 끝 변환이 발생합니다.
Unset
경로에서 text 속성을 설정 해제하면 체크인 또는 체크 아웃시 라인 끝 변환을 시도하지 않도록 Git에 지시합니다.
core.autocrlf
새로운 (1.7.2+) Git에서 사용되지 않았 core.eol
으며 더 안정적인 방법으로 간주되는 text-attribute의 올바른 설정 | 해제