모든 줄을 수정하지 않고 특정 줄에서 캐리지 리턴(^M) 제거

모든 줄을 수정하지 않고 특정 줄에서 캐리지 리턴(^M) 제거

꽤 긴 C++ 파일이 있는데 약 15개 줄에 git diff --check몇 개의 캐리지 리턴이 있다고 보고하고 있습니다 . ^M이것은 Windows 7 컴퓨터에 있습니다. Visual Studio의 Advanced Save Options, Notepad++의 EOL 변환 등 여러 솔루션을 검색한 결과 Git이 불평하는 것뿐만 아니라 모든 줄을 수정하는 것으로 보입니다. 이로 인해 모든 줄이 교체되는 git diff가 발생합니다.

^M이 파일에 대한 이전의 모든 변경 사항에도 캐리지 리턴이 있었고 이전 커밋에서 캐리지 리턴 경고를 무시했기 때문일 수 있습니까 ?

실행 중은 git config core.autocrlftrue를 반환하지만 파일을 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이 제거됩니다.

관련 정보