꽤 긴 C++ 파일이 있는데 약 15개 줄에 git diff --check
몇 개의 캐리지 리턴이 있다고 보고하고 있습니다 . ^M
이것은 Windows 7 컴퓨터에 있습니다. Visual Studio의 Advanced Save Options
, Notepad++의 EOL 변환 등 여러 솔루션을 검색한 결과 Git이 불평하는 것뿐만 아니라 모든 줄을 수정하는 것으로 보입니다. 이로 인해 모든 줄이 교체되는 git diff가 발생합니다.
^M
이 파일에 대한 이전의 모든 변경 사항에도 캐리지 리턴이 있었고 이전 커밋에서 캐리지 리턴 경고를 무시했기 때문일 수 있습니까 ?
실행 중은 git config core.autocrlf
true를 반환하지만 파일을 git diff --cached --check
준비한 후 해당 파일에 대해 실행할 때 파일을 준비하면 아무 작업도 수행되지 않습니다.
제거할 수 있는 방법이 있나요? 수동으로 라인에 가서 변경하려고 시도하는 것은 도움이 되지 않는 것 같습니다.
답변1
15줄?
notepad++에서 바꾸기를 선택합니다. 확장을 선택했습니다. \r(^M)을 검색하고 아무것도 바꾸지 마십시오(개행 문자를 원하지 않는 한 \n으로 바꾸십시오). 모든 ^M을 교체하는 것을 원하지 않으므로 모두 교체를 누르지 말고 교체하려는 항목을 선택하십시오.
일반 Windows 메모장을 사용하는 경우 ^M이 상자로 표시됩니다. 상자를 제거할 수 있습니다. 추악하지만 작동합니다.
답변2
사용dos2unix <file>
명령줄에 있는 경우. 필요한 줄 끝을 수정하거나 필요한 것이 없으면 아무 작업도 수행하지 않습니다. find . -name "*.cpp" -exec dos2unix {} +
여러 파일을 수행하려면 a를 수행하십시오 . 그런 다음 커밋 전과 비교하십시오 git diff
.
파일에서 줄 끝이 혼합되어 끝나지 않는 것이 가장 좋습니다. 기록을 병합하고 따라가는 것이 어색해질 수 있습니다.
일부 편집자는 스타일을 변경하지 않지만 파일에 ^M 하나만이라도 들어가면 일부 편집자는 파일을 작성할 때 dos 스타일을 가정하고 모든 줄 끝을 변경할 것이라고 생각합니다.
일반적으로 편집기가 원하는 스타일을 고수하도록 하는 편집기 설정을 찾는 것이 가능합니다. 줄 끝 및 탭 설정도 일반적으로 스타일에 따라 설정됩니다.
답변3
Git은 git config --global core.autocrlf true
.하지만 체크아웃 시간이나 커밋 시간에는 수행됩니다.따라서 git은 준비된 변경 사항을 표시하지 않지만 편집자가 원하지 않는 새로운 줄 끝을 도입하는 경우 조용히 변환을 처리해야 합니다.
원하지 않는 줄 끝이 이미 저장소에 있으면 dos2unix를 사용한다고 생각합니다.
자세한 내용은 다음 답변을 참조하세요. https://stackoverflow.com/questions/10418975/how-to-change-line-ending-settings그리고 읽어보세요http://git-scm.com/book/en/Customizing-Git-Git-Configuration#Formatting-and-Whitespace
답변4
Windows 컴퓨터에서는 다음과 같이 할 수 있습니다.
for /r %f in (*.js) do "c:\Program Files\git\usr\bin\dos2unix.exe" %f
현재 디렉터리 아래에 확장자가 .js인 모든 파일에서 CR이 제거됩니다.