git-diff忽略^ M

在某些文件包含^ M作为换行符的项目中。显然不可能对这些文件进行区分,因为git-diff将其视为整个文件仅一行。


与以前的版本有何不同?


是否有类似“比较时将^ 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。


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


皈依舞
浏览 1879回答 3
3回答

慕娘9325324

GitHub建议您确保在git处理的存储库中仅使用\ n作为换行符。有一个自动转换选项:$ git config --global core.autocrlf true当然,据说这是将crlf转换为lf,而您想将crlf转换为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.autocrlf 。

江户川乱折腾

在Windows上进行开发时,使用时遇到了这个问题git tfs。我是这样解决的:git config --global core.whitespace cr-at-eol这基本上告诉Git行尾CR并不是错误。其结果是,那些烦人的^M字符不再出现在线路末端git diff,git show等等。似乎保留了其他设置。例如,行尾的多余空格仍会在差异中显示为错误(以红色突出显示)。(其他答案都暗示了这一点,但是以上正是设置设置的方法。要仅为一个项目设置设置,请省略--global。)编辑:在经历了许多行尾麻烦之后,在.NET团队中工作时,我有以下设置是最幸运的:没有core.eol设置没有core.whitespace设置没有core.autocrlf设置当运行Windows的Git安装程序时,您将获得以下三个选项:签出Windows风格,提交Unix风格的行结尾&nbsp;<-选择这一行按原样签出,提交Unix样式的行尾按原样签出,按原样提交如果需要使用空格设置,则可能需要在与TFS进行交互时仅在每个项目中启用它。只需省略--global:git config core.whitespace cr-at-eol如果您需要删除一些core。*设置,最简单的方法是运行以下命令:git config --global -e这将在文本编辑器中打开全局.gitconfig文件,您可以轻松删除要删除的行。(或者,您也可以在它们前面加上“#”以将其注释掉。)

DIEA

另请参阅:core.whitespace = cr-at-eol或等效地,[core]&nbsp; &nbsp; whitespace = cr-at-eol其中whitespace以制表符开头。
打开App,查看更多内容
随时随地看视频慕课网APP