为了账号安全,请及时绑定邮箱和手机立即绑定

git-diff忽略^ M

git-diff忽略^ M

Git
皈依舞 2019-09-27 16:31:53
在某些文件包含^ M作为换行符的项目中。显然不可能对这些文件进行区分,因为git-diff将其视为整个文件仅一行。与以前的版本有何不同?是否有类似“比较时将^ M作为换行符”的选项?prompt> git-diff "HEAD^" -- MyFile.as diff --git a/myproject/MyFile.as b/myproject/MyFile.asindex 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 fileprompt>更新:现在,我编写了一个脚本,用于检查最新的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)endgitpath = 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)endif FileTest.exist?(resultdir)  puts "the result dir must not exist"  exit(1)endFileUtils.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 cmdend
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

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 。


查看完整回答
反对 回复 2019-09-27
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

在Windows上进行开发时,使用时遇到了这个问题git tfs。我是这样解决的:

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

这基本上告诉Git行尾CR并不是错误。其结果是,那些烦人的^M字符不再出现在线路末端git diffgit show等等。

似乎保留了其他设置。例如,行尾的多余空格仍会在差异中显示为错误(以红色突出显示)。

(其他答案都暗示了这一点,但是以上正是设置设置的方法。要仅为一个项目设置设置,请省略--global。)

编辑

在经历了许多行尾麻烦之后,在.NET团队中工作时,我有以下设置是最幸运的:

  • 没有core.eol设置

  • 没有core.whitespace设置

  • 没有core.autocrlf设置

  • 当运行Windows的Git安装程序时,您将获得以下三个选项:

    • 签出Windows风格,提交Unix风格的行结尾 <-选择这一行

    • 按原样签出,提交Unix样式的行尾

    • 按原样签出,按原样提交

如果需要使用空格设置,则可能需要在与TFS进行交互时仅在每个项目中启用它。只需省略--global

git config core.whitespace cr-at-eol

如果您需要删除一些core。*设置,最简单的方法是运行以下命令:

git config --global -e

这将在文本编辑器中打开全局.gitconfig文件,您可以轻松删除要删除的行。(或者,您也可以在它们前面加上“#”以将其注释掉。)


查看完整回答
反对 回复 2019-09-27
?
DIEA

TA贡献1820条经验 获得超2个赞

另请参阅:


core.whitespace = cr-at-eol

或等效地,


[core]

    whitespace = cr-at-eol

其中whitespace以制表符开头。


查看完整回答
反对 回复 2019-09-27
  • 3 回答
  • 0 关注
  • 1878 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信