LF를 CRLF로 대체하는 Git
에서는 Windows 를 사용하여 했습니다.git add
하다
LF는 CRLF로 대체됩니다.
이 변환은 어떤 영향을 미칩니까?
는 잘못된 인 ""가 입니다.core.autocrlf
를 클릭합니다.
★★★★★★★★★★의 컨셉autocrlf
는, 투과적으로 하는 것입니다.그리고 그렇다!
나쁜 소식: 값을 수동으로 구성해야 합니다.
좋은 소식: Git 설치당 한 번만 수행되어야 합니다(프로젝트 설정당도 가능).
구조:
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repository repository repository
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
서 ★★★★crlf
= 마커, = win-of-line = win-of-line = win-line 엔엔엔엔엔,,,,,,,,,,,, lf
= unix-style (Mac OS X Mac)
이전 버전)cr
위의 3가지 옵션 중 어느 것도 해당되지 않습니다.
이 경고는 언제 (Windows에서) 표시됩니까?
–autocrlf
=true
unix 의 lf
) 중 (= REMPLE)에서
–autocrlf
=input
이 crlf
중 =에서 (= ALways)에서
–autocrlf
=false
안 돼 - 안 돼!
이 경고는 무슨 뜻입니까?
"LF는 CRLF로 대체됩니다"라는 경고는 다음과 같습니다.autocrlf
=true
후에 스타일의 CRLF로 대체됩니다).commit-checkout은 unix 의 LF로 대체됩니다).Git(윈도우) Unix(유닉스)의 LF(LF)를 사용합니다.
"CRLF가 LF로 대체될 것입니다"라는 경고는 다음과 같습니다.autocrlf
=input
후에 스타일의 가 손실됩니다(LF로 대체됩니다).commit-checkout은 의 CRLF 의 CRLF 의 CRLF 의 CRLF 의 CRLF 의 CRLF 의 CRLF 의 CRLF 의 LF 의 LF 의 CRLF 의 COMT 가 마세요input
를 클릭합니다.
다른 으로 른른른 yet yet yet yet yet yet yet yet yet yet yetautocrlf
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
여기서 x는 CRLF(윈도우 스타일) 또는 LF(유닉스 스타일)이며 화살표는 다음을 나타냅니다.
file to commit -> repository -> checked out file
수정 방법
" " "core.autocrlf
는 Git 시의 gitconfig(Git 설설에에 에에에에 에에에에에 gitconfiggg)에 됩니다.%ProgramFiles(x86)%\git\etc\gitconfig
、 Windows 、/etc/gitconfig
★★★★★★★★★★★★★★★★★★★★★」.)
"단위) 는 – "global"(사용자 단위)에 .~/.gitconfig
또 , 또 다른 , 른른른른른
"global 단위) at - "global" (사용자 단위) at - "global" (사용자 단위) 。$XDG_CONFIG_HOME/git/config
★★★★★★★★★★★★★★★★★」$HOME/.config/git/config
★★★★★★★★★★★★★★★★★」
" ( 단위) at - "로컬" (repo 단위) at - "repo" (repo 단위).git/config
이치노
그럼 이렇게 쓰세요.git config core.autocrlf
디렉토리에서 되고 있는 값 및 ""를 합니다.
–git config --system core.autocrlf false
「 」
–git config --global core.autocrlf false
「 」
–git config --local core.autocrlf false
경고.
–git config
을 사용합니다.gitattributes
설정을 지정합니다.
–crlf -> lf
은 새로운할 때만 합니다.crlf
리포에 이미 존재하는 파일은 영향을 받지 않습니다.
모럴(Windows용):
- 사용 - 사용core.autocrlf
=true
및엔딩을 를 할 의향이 ), 「Unix」( 「유닉스」)는 「Unix」(「유닉스」)/「IDE」)」를 참조해 주세요.
- 사용 - 사용core.autocrlf
=false
엔딩을 를 ), Windows 에서는, 「」( 「unix」/IDE」)를 사용합니다.
- 사용하지 않음core.autocrlf
=input
적절한 이유가 없는 한(예를 들어 Windows에서 unix 유틸리티를 사용하거나 makefiles 문제가 발생한 경우),
PS Windows용 Git 설치 시 선택해야 할 사항은 무엇입니까?
Unix에서 프로젝트를 사용하지 않을 경우 기본 첫 번째 옵션에 동의하지 마십시오.세 번째 항목(있는 그대로 체크아웃, 있는 그대로 커밋)을 선택합니다.이 메시지는 표시되지 않습니다.전혀.
PPS: 개인 취향은 unix 스타일의 엔딩을 사용하도록 에디터/IDE를 설정하고 설정을 하는 것입니다.core.autocrlf
로로 합니다.false
.
갱신(2022)
2018년 이후 git은 필요에 따라 기존 행의 끝을 수정하는 repo를 --정규화할 수 있습니다.
Git에는 3가지 모드가 있습니다.
# This command will print "true" or "false" or "input"
git config core.autocrlf
하려면 , , , , , , , 를 합니다.true
★★★★★★★★★★★★★★★★★」false
위의 명령줄로 이동합니다.
ifcore.autocrlf
true로 설정되어 있습니다.즉, Git이 텍스트 파일이라고 생각하는 파일을 Git 저장소에 추가할 때마다 CRLF 행의 모든 엔딩이 커밋에 저장되기 전에 LF로 바뀝니다.든지 ★★★★★★★★★★★★★★★」git checkout
모든 텍스트 파일은 자동으로 LF 행 엔딩이 CRLF 엔딩으로 변환됩니다.이것에 의해, 다른 라인 엔딩 스타일을 사용하는 플랫폼간에 프로젝트를 개발할 수 있게 됩니다.커밋이 너무 시끄럽지 않습니다.이것은 각 에디터가 라인 엔딩 스타일을 항상 LF로 변경하기 때문입니다.
이 편리한 변환의 부작용은, 그리고 이것이 경고입니다.작성한 텍스트파일이 원래 CRLF가 아닌 LF 엔딩으로 되어 있으면, 그 파일은 통상대로 LF로 보존되지만, 나중에 체크 아웃 하면 CRLF 엔딩이 됩니다.일반 텍스트 파일의 경우 보통 이 정도면 됩니다.이 경우 경고는 "정보 제공"이지만 Git이 바이너리 파일을 텍스트 파일로 잘못 판단했을 경우 중요한 경고입니다. 왜냐하면 Git이 바이너리 파일을 손상시킬 수 있기 때문입니다.
ifcore.autocrlf
는 false로 설정되며 행 끝 변환은 실행되지 않으므로 텍스트파일은 그대로 체크인 됩니다.모든 개발자가 Linux 또는 Windows에 있는 한 이 기능은 정상적으로 작동합니다.하지만 제 경험상 여전히 텍스트 파일 끝에 여러 줄의 문자가 섞여 문제가 되는 경향이 있습니다.
Windows 개발자로서 설정을 ON 상태로 두는 것이 제 개인적인 취향입니다.
"input" 값을 포함하는 최신 정보는 git-config를 참조하십시오.
이미 코드를 체크 아웃한 경우 파일은 이미 인덱싱되어 있습니다.Git 설정을 변경한 후 다음을 실행합니다.
git config --global core.autocrlf input
인덱스를 새로 고쳐야 합니다.
git rm --cached -r .
그리고 Git 인덱스를 다시 씁니다.
git reset --hard
참고: 로컬 변경 내용이 제거됩니다.이 작업을 수행하기 전에 미리 저장해 두는 것이 좋습니다.
출처: 회선 엔딩을 처리하도록 Git 설정
git config core.autocrlf false
unix2dos와 dos2unix는 모두 Git Bash가 설치된 Windows에서 사용할 수 있습니다.다음 명령을 사용하여 UNIX(LF) → DOS(CRLF) 변환을 수행할 수 있습니다.따라서 경고가 표시되지 않습니다.
unix2dos filename
또는
dos2unix -D filename
단, 이 명령어는 기존 CRLF 파일에서 실행하지 마십시오.이렇게 하면 2행마다 빈 줄바꿈이 생깁니다.
dos2unix -D filename
는, 모든 operating system에서는 동작하지 않습니다.호환성에 대해서는, 이 링크를 확인해 주세요.
가 있는 는, 「」를 해 주세요.--force
라고 되어 있는 는, 「Invalid」라고 하는 것을 합니다.-f
.
이 주제에 대해 이야기할 때 일반적으로 회선 엔딩에 관한 GitHub 기사가 언급됩니다.
하는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★core.autocrlf
설정이 매우 혼재되어 있습니다.
저는 Cygwin에서 Windows를 사용하고 있으며 Windows와 Unix의 프로젝트를 서로 다른 시간에 처리하고 있습니다.Windows 프로젝트에서도 Unix(LF) 라인 엔딩이 필요한 Bash 셸 스크립트를 사용하는 경우가 있습니다.
GitHub 사용방법 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」core.autocrlf
Windows 의 설정에서는, Unix 프로젝트(Cygwin 에서 완전하게 동작하고 있는 경우, 또는 Linux 서버상에서 사용하는 프로젝트에 공헌하고 있는 경우)를 체크 아웃 하면, 텍스트 파일이 Windows(CRLF) 행 엔딩으로 체크 아웃 되어 문제가 발생합니다.
core.autocrlf
어떤 옵션도 제대로 작동하지 않을 수 있습니다.이 옵션은 로컬(리포지토리) Git 구성에서 설정될 수 있지만, Windows와 Unix 관련 정보를 모두 포함하는 프로젝트에는 충분하지 않습니다(예를 들어 Bash 유틸리티 스크립트를 사용하는 Windows 프로젝트가 있습니다).
제가 찾은 최선의 선택은 저장소 단위의 .gitattributes 파일을 만드는 것입니다.GitHub 기사에 기재되어 있습니다.
이 기사의 예:
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
프로젝트 저장소 중 하나:
* text=auto
*.txt text eol=lf
*.xml text eol=lf
*.json text eol=lf
*.properties text eol=lf
*.conf text eol=lf
*.awk text eol=lf
*.sed text eol=lf
*.sh text eol=lf
*.png binary
*.jpg binary
*.p12 binary
셋업이 좀 더 필요하지만 프로젝트당 1회 실시해 주세요.또, 이 프로젝트에서는, 어느 OS에 있어도 회선 엔딩에 문제가 없습니다.
바실롱가스의 대답은 비슷하지만 (최소한 맥에서는) 시대에 뒤떨어진 것 같다.
~/.gitconfig 파일을 합니다.safecrlf
false:
[core]
autocrlf = input
safecrlf = false
그렇게 하면 줄 끝 문자가 무시되는 것 같습니다(어쨌든 저는 효과가 있었습니다).
Vim 서 ( ( ( ( ( ( ( ( ( : 。:e YOURFILE
) ENTER。
:set noendofline binary
:wq
저도 이런 문제가 있었어요.
SVN은 회선 끝 변환을 하지 않으므로 파일은 CRLF 회선 끝 그대로 커밋됩니다.그런 다음 git-svn을 사용하여 프로젝트를 git에 넣으면 CRLF 엔딩은 git 저장소에 남습니다.이것은 git이 기대하는 상태가 아닙니다.기본적으로는 unix/linux(LF) 행 엔딩만 체크인 됩니다.
그런 다음 윈도에서 파일을 체크 아웃하면 autocrlf 변환은 파일을 그대로 유지합니다(이미 현재 플랫폼에 대한 올바른 엔딩이 있기 때문에). 그러나 체크 인된 파일과 차이가 있는지 여부를 판단하는 프로세스는 비교하기 전에 역변환을 수행합니다.결과적으로 체크아웃된 파일의 LF라고 생각되는 것과 저장소의 예기치 않은 CRLF를 비교하게 됩니다.
제가 보기엔 당신의 선택은 다음과 같습니다.
- git-svn을 사용하지 않고 코드를 새로운 git 저장소로 다시 Import하면 첫 번째 git commit --all에서 행 엔딩이 변환됩니다.
- autocrlf를 false로 설정하고 행 끝이 git이 선호하는 스타일이 아님을 무시합니다.
- autocrlf를 끈 상태에서 파일을 체크 아웃하고, 모든 행 끝을 수정하고, 모든 것을 다시 체크 인하고, 다시 켜십시오.
- 원래 커밋이 git이 예상하지 못한 CRLF를 더 이상 포함하지 않도록 저장소 이력을 다시 씁니다.(이력 개서에 관한 일반적인 주의사항이 적용됩니다.)
각주: 옵션 #2를 선택하면 보조 도구(기본, 패치 등) 중 일부가 CRLF 파일을 처리하지 못하고 CRLF와 LF(일관성이 없는 행 끝)가 혼재된 파일이 조만간 생성됩니다.둘 다 이길 방법이 없어요.
~/.gitattributes 파일에서 다음 항목을 삭제합니다.
* text=auto
Git이 처음부터 라인 엔딩을 체크하는 것을 방지합니다.
Windows 의 툴의 대부분은, 텍스트 파일에 간단한 LF 를 사용할 수도 있습니다.예를 들어, '.editorconfig' 파일의 Visual Studio에 대한 동작을 다음과 같은 예제 콘텐츠(부품)로 제어할 수 있습니다.
indent_style = space
indent_size = 2
end_of_line = lf <<====
charset = utf-8
원래의 Windows 메모장만이 LF에서 동작하지 않습니다만, 보다 적절한 심플 에디터 툴이 준비되어 있습니다.
따라서 Windows의 텍스트 파일에서도 LF를 사용해야 합니다.이것은 저의 메시지이며, 강력히 추천합니다!윈도우에서 CRLF를 사용할 이유가 없습니다!
는 ( ( )를 사용하고 .\
C/+'에는 경로가 포함됩니다.이치노 슬래시에 </myheader > <를 포함합니다가 지원합니다「C/++」, 「Microsoft」를 참조해 주세요.
따라서 Git의 적절한 설정은 다음과 같습니다.
git config core.autocrlf false
메시지:dos2unix나 unix2dos와 같은 오래된 사고 프로그램은 잊어버려라.LF가 Windows에서 사용하는 것이 적절하다는 것을 팀원들에게 명확히 합니다.
http://www.rtuin.nl/2013/02/how-to-make-git-ignore-different-line-endings/ (작동하지 않음)
CRLF 동작을 완전히 디세블로 하거나 파일 형식별로 .gitattributes 파일의 엔트리를 변경하여 디세블로 할 수 있습니다.제 경우, 다음과 같이 적습니다.
- - crlf 이것은 Git에게 모든 파일의 행 끝을 무시하도록 지시합니다.작업 디렉토리의 파일은 변경되지 않습니다.네가 핵을 가지고 있다고 해도.autocrlf를 true, false 또는 input으로 설정합니다.
echo "* -crlf" > .gitattributes
별도의 커밋으로 이 작업을 수행하세요.그렇지 않으면 Git에서는 (autocrlf 옵션을 변경했는지 여부에 따라) 한 번만 변경해도 파일 전체가 수정된 것으로 표시될 수 있습니다.
이거 진짜 먹힌다.Git은 혼합된 라인 엔딩 프로젝트에서 라인 엔딩을 존중하고 경고하지 않습니다.
Git on Windows에 대해서는 잘 모르지만...
Git은 실행 중인 플랫폼(Windows)에 맞춰 리턴 포맷을 변환하고 있는 것 같습니다.Windows 에서는 CRLF 가 디폴트의 반환 형식이며, 그 외의 대부분의 OS 에서는 LF 가 디폴트의 반환 형식입니다.
코드를 다른 시스템으로 이동하면 반환 형식이 올바르게 조정될 수 있습니다.또한 Git은 LF를 CRLF로 변환하지 않고 JPEG 파일로 바이너리 파일을 그대로 유지할 수 있을 정도로 스마트하다고 생각합니다.
요약하자면, 이 전환에 대해 너무 고민할 필요는 없을 것입니다.다만, 프로젝트를 tarball로서 아카이브 하는 경우는, CRLF 대신에 LF 회선 터미네이터를 사용하는 것을 동료 코더에게 추천합니다.얼마나 신경 쓰느냐에 따라(메모장을 사용하지 않느냐에 따라), 할 수 있다면 LF 리턴을 사용하도록 Git을 설정할 수도 있습니다.
부록: CR은 ASCII 코드 13, LF는 ASCII 코드 10입니다.따라서 CRLF는 2바이트, LF는 1바이트입니다.
다음과 같이 표시됩니다.
warning: (현재 Core를 사용하여 다른 폴더에 체크 아웃/클론하는 경우).autocrlf는 입니다.)LF는 CRLF로 대체됩니다.
파일은 (현재) 작업 디렉토리에서 원래 행의 끝을 가집니다.
이 사진은 그것이 무엇을 의미하는지 설명해 줄 것이다.
Git의 최신 버전을 설치했는지 확인합니다.
는 앞의.git config core.autocrlf false
Git ( 2 . 7 . 1 ) 。
이제 git(2.7.1에서 2.20.1로) 업그레이드 할 때 작동합니다.
- Notepad++에서 파일을 엽니다.
- Edit(편집) → EOL Conversion(EOL 변환) 메뉴로 이동합니다.
- Windows 포맷을 클릭합니다.
- 파일을 저장합니다.
OP의 질문은 Windows와 관련된 것으로, 관리자가 작업을 하지 않았기 때문에 디렉토리로 이동하거나 Notepad++의 파일을 실행하지 않고서는 다른 파일을 사용할 수 없었습니다.
그래서 이 길로 가야 했다.
cd "C:\Program Files (x86)\Git\etc"
git config --global core.autocrlf false
CRLF는 두 개의 다른 OS(Linux 및 Windows)에서 "코드"를 사용하는 동안 문제가 발생할 수 있습니다.
Python 스크립트는 Linux Docker 컨테이너에 작성되어 Windows의 Git Bash를 사용하여 푸시되었습니다.LF가 CRLF로 대체될 것이라는 경고를 받았습니다.별로 생각 안 해봤는데 나중에 대본을 쓰니까 이렇게 써있더라고요.
/usr/bin/env: 'python\r': 해당 파일 또는 디렉토리가 없습니다.
은 '오빠'입니다.\r
당신을 위한 결과를 위해.Windows 에서는, 의 선두에 「 리턴을 새로운 로서 사용합니다 「\n」, 「\n」는 「CR」(CR)(「CR」)입니다.\n\r
이치노
다른 답변은 일반적인 개념에 매우 적합합니다.이전 설정에서 커밋된 기존 저장소에서 업데이트 후에도 경고가 발생하는 문제가 발생했습니다.
--renormalize를 사용하면 도움이 됩니다.
git add --renormalize .
매뉴얼에서 다음 항목을 참조하십시오.
"모든 추적 대상 파일에 새로 "클린" 프로세스를 적용하여 인덱스에 다시 추가합니다.이것은 코어를 변경한 후에 편리합니다.잘못된 CRLF/LF 행 끝에 추가된 파일을 수정하기 위한 autocrlf 설정 또는 텍스트 속성.이 옵션은 -u를 의미합니다."
저도 같은 실수를 했어요.이 문제는 Windows 10에 NVM NVM을 설치한 후에 발생했습니다.
모든 레벨에서 autoclrf를 설정하지 않았습니다.
사용한 CMD:"ls-files --eol"
i/lf w/crlf attr/ src/components/quotes/ExQuoteForm.js
i/lf w/lf attr/ src/components/quotes/HighlightedQuote.js
결론:
내가 만든 파일들은 다른 결말을 가지고 있다.
파일을 변경하고 리셋하려면
git config core.autocrlf false
git rm --cached -r .
git reset --hard
단,
일부 프로젝트에서는 저장소를 삭제하고 새로 시작해야 했습니다.
에서는 이 텍스트 에디터로 할 수 .LF
아래 ATOM 지침을 참조하십시오.그것은 간단하고 명료하다.
[ ] 를 합니다.CRLF
다음 중 하나:
선택합니다.LF
맨 위의 드롭다운:
GNU/Linux 쉘 프롬프트에서 dos2unix 및 unix2dos 명령을 사용하면 MS Windows에서 파일을 쉽게 변환/포맷할 수 있습니다.
CR 및 LF는 코드 형식을 지정하는 데 도움이 되는 특수 문자 집합입니다.
CR(/r)은 커서를 줄의 선두에 놓지만 새 줄은 작성하지 않습니다.macOS는 이렇게 동작합니다.
LF(/n)는 새 행을 생성하지만 커서가 해당 행의 선두에 배치되지 않습니다.커서는 마지막 줄의 끝에 있습니다.이것이 Unix와 Linux의 구조입니다.
CRLF(/r/f)는 새 행을 만들고 커서를 새 행의 선두에 놓습니다.Windows OS 에서는, 다음과 같이 인식되고 있습니다.
요약:
- LF(라인 피드)
- Line Feed(라인 피드)의 약자
- /n으로 표시됨
- 코드에 새 행을 만듭니다.
- ASCII 코드는 10 입니다.
- UNIX 및 UNIX를 기반으로 하는 다른 OS에서 사용됩니다.
- CR(캐리지 리턴)
- CARGE RETURN의 약자
- /r로 표시되다
- 커서를 행의 선두에 놓습니다.
- ASCII 코드는 13 입니다.
- macOS 및 그 이전 버전에서 사용됩니다.
- CRLF(캐리지 리턴 및 라인 피드)
- 캐리지 리턴 및 라인 피드(CARGARE RETURN
- /n/r로 표시됨
- 는 새 행을 만들고 해당 새 행의 선두에 커서를 놓습니다.
- ASCII 코드는 LF의 경우 10, CR의 경우 13입니다.
- 주로 Windows OS에서 사용됩니다.
Git은 기본적으로 LF를 사용합니다.따라서 Windows에서 Git을 사용하면 "CRLF가 LF로 대체됩니다"와 같은 경고가 발생하고 모든 CRLF가 LF로 자동 변환되므로 코드가 호환됩니다.
NB: 걱정하지 마세요.경고보다는 알림 메시지로 더 많이 볼 수 있습니다.
도 같은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.git add . && git reset
이치노
언급URL : https://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf
'itsource' 카테고리의 다른 글
OSX 터미널에서 링크를 클릭할 수 있는 방법이 있습니까? (0) | 2023.04.12 |
---|---|
범위가 아닌 어레이 데이터에서 차트 생성 (0) | 2023.04.12 |
WPF: 이미지를 원래 크기로 표시하는 방법 (0) | 2023.04.12 |
Bash에서 문자열에서 마지막 n자를 제거하려면 어떻게 해야 합니까? (0) | 2023.04.12 |
Git에서 로컬 작업 디렉토리를 지우려면 어떻게 해야 하나요? (0) | 2023.04.12 |