programing

'git diff' 무시 ^M

css3 2023. 4. 10. 22:05

'git diff' 무시 ^M

중 가 포함된 ^M구분자로는 이러한 하는 것은할 것으로 .git diff1번, 1번, 1번, 1번

하면 좋을까요?git diff소스 코드 파일의 현재 버전과 이전 버전을 비교할 때?

' 'treat ' ' '' like like like like like like like like like like like like like like like like ^M새로운 라인으로 표시" 라고 입력합니다.

prompt> git-diff "HEAD^" -- MyFile.as 
diff --git a/myproject/MyFile.as b/myproject/MyFile.as
index be78321..a393ba3 100644
--- a/myproject/MyFile.cpp
+++ b/myproject/MyFile.cpp
@@ -1 +1 @@
-<U+FEFF>import flash.events.MouseEvent;^Mimport mx.controls.*;^Mimport mx.utils.Delegate
\ No newline at end of file
+<U+FEFF>import flash.events.MouseEvent;^Mimport mx.controls.*;^Mimport mx.utils.Delegate
\ No newline at end of file
prompt>

갱신:

최신 10개의 리비전을 체크하여 CR을 LF로 변환하는 Ruby 스크립트를 작성했습니다.

require 'fileutils'

if ARGV.size != 3
  puts "a git-path must be provided"
  puts "a filename must be provided"
  puts "a result-dir must be provided"
  puts "example:"
  puts "ruby gitcrdiff.rb project/dir1/dir2/dir3/ SomeFile.cpp tmp_somefile"
  exit(1)
end

gitpath = ARGV[0]
filename = ARGV[1]
resultdir = ARGV[2]

unless FileTest.exist?(".git")
  puts "this command must be run in the same dir as where .git resides"
  exit(1)
end

if FileTest.exist?(resultdir)
  puts "the result dir must not exist"
  exit(1)
end
FileUtils.mkdir(resultdir)

10.times do |i|
  revision = "^" * i
  cmd = "git show HEAD#{revision}:#{gitpath}#{filename} | tr '\\r' '\\n' > #{resultdir}/#{filename}_rev#{i}"
  puts cmd 
  system cmd
end

GitHub에서는 반드시 \n을 git-handled reposit의 줄바꿈 문자로만 사용할 것을 권장합니다.자동 변환 옵션이 있습니다.

$ git config --global core.autocrlf true

물론 crlf를 lf로 변환하고 cr을 lf로 변환한다고 합니다.그래도 잘 됐으면 좋겠는데…

그런 다음 파일을 변환합니다.

# Remove everything from the index
$ git rm --cached -r .

# Re-add all the deleted files to the index
# You should get lots of messages like: "warning: CRLF will be replaced by LF in <file>."
$ git diff --cached --name-only -z | xargs -0 git add

# Commit
$ git commit -m "Fix CRLF"

core.autocrf는 man 페이지에 설명되어 있습니다.

하면서 Windows를 사용할 때 이하였습니다.git tfs이렇게 해결했습니다.

git config --global core.whitespace cr-at-eol

이는 기본적으로 Git에게 엔드 오브 라인 CR이 오류가 아님을 알려줍니다.그 결과, 짜증나는 사람들은^M 되었습니다.git diff,git show 등등.

예를 들어, 행의 끝에 있는 여분의 공백은 diff에서 에러(빨간색으로 강조 표시)로 표시되는 등, 그 외의 설정은 그대로인 것처럼 보입니다.

(다른 답변도 이에 대해 언급하고 있지만, 위의 내용은 정확히 설정 방법입니다.프로젝트만 하려면 , 「 」를 합니다.--global

편집:

많은 라인 엔딩 작업 후 작업 시 최고의 행운을 누려왔습니다.NET 팀, 다음과 같은 설정이 있습니다.

  • no core.eol 설정
  • 코어 없음.공백 설정
  • 코어 없음.autocrlf 설정
  • Windows inst Git instra 。
    • Windows 스타일의 체크 아웃, Unix 스타일의 행 엔딩 커밋<--이것을 선택합니다.
    • 이대로 체크아웃, Unix 스타일의 행 끝 커밋
    • 있는 그대로 체크아웃, 있는 그대로 커밋

공백 설정을 사용해야 하는 경우 TFS와 상호 작용해야 하는 경우에만 프로젝트별로 활성화해야 합니다. ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ.--global:

git config core.whitespace cr-at-eol

코어를 제거해야 할 경우.* settings 가장 쉬운 방법은 다음 명령을 실행하는 것입니다.

git config --global -e

그러면 글로벌 .gitconfig 파일이 텍스트에디터에 열리고 삭제할 행을 쉽게 삭제할 수 있습니다(또는 그 앞에 '#'을 붙여 코멘트를 작성할 수도 있습니다).

★★를 해 보세요.git diff --ignore-space-at-eol , 「」git diff --ignore-space-change , 「」git diff --ignore-all-space.

다음 항목도 참조해 주세요.

core.whitespace = cr-at-eol

또는 동등하게

[core]
    whitespace = cr-at-eol

서 ''는whitespace에는 탭 문자가 붙습니다.

게 거죠?^M 안에서git diff

저 같은 경우에는 Windows에서 개발한 프로젝트를 진행 중이었고 Linux를 사용했습니다.했을 때, 「 」라고 것이 되었습니다.^M git diff ★★★★★★★★★★★★★★★★★★★★★★★.^MWindows에서 개발되었기 때문에 Windows에서 사용되었습니다.CRLF에서는 「」, 「Linux」, 「Linux 에서는, 「Linux 」를 사용합니다.LF행의 끝

분명히 윈도우 개발자는 Git 설치 중에 "Checkout Windows-style, commit Unix-style line ends" 옵션을 사용하지 않았다.

그럼 이걸 어떻게 해야 할까요?

Windows 사용자가 git을 재설치하고 "Checkout Windows-style, commit Unix-style line ends" 옵션을 사용할 수 있습니다.이것은, Windows 의 행의 말미 문자의 예외로서 Windows 의 독자적인 문제를 이러한 방법으로 해결할 수 있기 때문입니다.

이 을 선택한 이 파일은 아직 이므로).CRLF이렇게 이렇게 했어요.

  1. 파일 시스템이 아닌 저장소에서 모든 파일을 제거하십시오.

     git rm --cached -r .
    
  2. 특정 파일을 사용하도록 강제하는 파일을 추가합니다.LF이치노넣으세요:

     * text=auto eol=lf
    
  3. 모든 파일을 다시 추가합니다.

     git add .
    

    다음과 같은 메시지가 표시됩니다.

     warning: CRLF will be replaced by LF in <filename>.
     The file will have its original line endings in your working directory.
    
  4. 떼면 될 것 같아요..gitattributes"Checkout Windows-style, commit Unix-style line ending" 옵션을 사용하지 않으려는 완고한 Windows 사용자가 없는 경우 파일을 참조하십시오.

  5. 모든 것을 약속하고 밀어붙여라.

  6. 해당 파일을 사용하고 있는 모든 시스템에서 해당 파일을 삭제하고 체크 아웃합니다.Windows 시스템에서 "Checkout Windows-style, commit Unix-style line ends" 옵션을 사용하는지 확인합니다.파일을 추가했을 때 다음과 같이 표시되었기 때문에 이러한 작업을 수행한 시스템에서도 이 작업을 수행해야 합니다.

     The file will have its original line endings in your working directory.
    

    다음과 같은 방법으로 파일을 제거할 수 있습니다.

     git ls | grep ".ext$" | xargs rm -f
    

    그 후 올바른 행의 엔딩으로 되돌리려면 다음 절차를 수행합니다.

     git ls | grep ".ext$" | xargs git checkout
    

    <고객명>의 치환.ext이치노

에서는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★LF말미에 , 및 「」, 「」의 문자.CR:)

윈도우를 이용하다 이 경우에도 하실 수 있습니다..gitattributes신청해 주세요.

상세정보 : https://help.github.com/articles/dealing-with-line-endings/ #platform - all

"diffing할 때 ^M을 newline으로 처리"와 같은 옵션이 있습니까?

2.2018년Git 2.16(2018년 1분기)으로 출시될 입니다.diff"입니다.

Junio C Hamano()gitster의 커밋 e9282f0(2017년 10월 26일)을 참조하십시오.
도움 : 요하네스 쉰델린()dscho
(2017년 11월 27일, Junio C Hamano에 의해 합병 ----커밋 10f65c2, )

diff:--ignore-cr-at-eol

새로운 옵션은 (완전) 라인의 끝에서 캐리지 리턴이 존재하지 않는 것처럼 처리하도록 diff 머신에 지시합니다.

하다'와 --ignore-*을 사용하면 로 인해 가 산만해지지 않고 할 수 있습니다.이 옵션을 사용하면 가짜로 인해 주의가 분산되지 않고 실제 변경 내용을 확인할 수 있습니다.CRLF<->LF이치노

TL;DR

변경합니다.core.pager로로 합니다."tr -d '\r' | less -REX" 소스코드입니다.

이래서

이 성가신 ^M은 컬러라이제이션과 호출기의 아티팩트입니다.여기에 이미지 설명 입력 에 의해 발생합니다.less -R기본 git 호출기 옵션입니다.(사용자의 기본 호출기는 입니다).

첫 번째 주의사항은 은 공백의 변화를 나타내지 않는다는 것입니다(예: \r\n vs \n).

셋업:

git clone https://github.com/CipherShed/CipherShed
cd CipherShed

에서는 unix의 않습니다.git diff -b:

echo -e 'The quick brown fox\njumped over the lazy\ndogs.' > test.txt
git add test.txt
unix2dos.exe test.txt
git diff -b test.txt

와 ^M이이 됩니다.less -R하다

git diff origin/v0.7.4.0 origin/v0.7.4.1 | less
git -c color.ui=always diff origin/v0.7.4.0 origin/v0.7.4.1 | less -R

이 수정은 파이프를 사용하여 출력에서 \r(^M)을 제거함으로써 나타납니다.

git diff origin/v0.7.4.0 origin/v0.7.4.1
git -c core.pager="tr -d '\r' | less -REX"  diff origin/v0.7.4.0 origin/v0.7.4.1

현명하지 못한 대안은 다음을 사용하는 것이다.less -r색상 코드뿐만 아니라 모든 제어 코드를 통과하기 때문입니다.

git config 파일을 직접 편집하고 싶은 경우는, 다음의 엔트리를 갱신/추가합니다.

[core]
        pager = tr -d '\\r' | less -REX

제 경우, 이 명령어는 무엇이었습니까?

git config  core.whitespace cr-at-eol

출처 : https://public-inbox.org/git/8d7e4807-9a79-e357-8265-95f22ab716e0 @web.de/T/

나는 이 문제로 오랫동안 고생했다.지금까지 가장 쉬운 해결책은 ^M 문자에 대해 걱정하지 말고 이를 처리할 수 있는 시각적 차이 도구를 사용하는 것입니다.

입력하는 대신:

git diff <commitHash> <filename>

시험:

git difftool <commitHash> <filename>

경우git diff, 다른 , 른, 른른른른(((((((((((((((((((((()는 표시되지 .^M의 첫 번째 저는 .그것은 나에게 효과가 있었습니다.

 git diff -b

다른 모든 답변에서 알 수 있듯이 장기적으로 회선 엔딩 설정을 올바르게 해야 한다는 점을 고려하십시오.

VonC가 지적한 바와 같이, 이것은 이미 git 2.16+에 포함되어 있습니다.옵션 ( 「 「 」 )입니다.--ignore-cr-at-eol되는 것과 .GNU diff에 ( )는 GNU diff에 의해 사용됩니다.--strip-trailing-cr를 참조해 주세요.

내가 이 문제에 직면했을 때, 나의 해결책은 git의 내장 diff 대신 GNU diff를 호출하는 것이었다. 왜냐하면 나의 git은 2.16보다 오래되었기 때문이다.다음 명령줄을 사용하여 이 작업을 수행했습니다.

GIT_EXTERNAL_DIFF='diff -u --strip-trailing-cr "$2" "$5";true;#' git diff --ext-diff

으로써, 그때,를 사용할 수 있습니다.--strip-trailing-cr'GNU diff' 입니다.

또 다른 방법도 있습니다.

git difftool -y -x 'diff -u --strip-trailing-cr'

설정된 호출기 설정을 사용하지 않기 때문에 전자를 선호합니다.

git 패치가 Windows 머신에서 이미 생성되어 있고 그것을 사용하고 있다면 Linux에서 dos2unix 유틸리티를 사용하여 패치를 포맷할 수 있습니다.

find -name "*.patch"| xargs dos2unix

그러면 EOL에서 ^M이 해결되고 Linux 머신에서 패치 적용을 받을 수 있습니다.

언급URL : https://stackoverflow.com/questions/1889559/make-git-diff-ignore-m