git-diff 忽略 ^M [英] git-diff to ignore ^M

查看:39
本文介绍了git-diff 忽略 ^M的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在某些文件包含 ^M 作为换行符的项目中.区分这些文件显然是不可能的,因为 git-diff 认为整个文件只是一行.

In a project where some of the files contains ^M as newline separators. Diffing these files are apparently impossible, since git-diff sees it as the entire file is just a single line.

一个版本与之前的版本有何不同?

How does one diff with the previous version?

是否有将 ^M 视为换行符"这样的选项?

Is there an option like "treat ^M as newline when diffing" ?

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>

<小时>

更新:

现在我已经编写了一个 Ruby 脚本来检查最新的 10 个修订版并将 CR 转换为 LF.

now I have written a Ruby script that checks out the latest 10 revisions and converts CR to 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

推荐答案

GitHub建议 你应该确保在 git-handled repos 中只使用 作为换行符.有一个选项可以自动转换:

GitHub suggests that you should make sure to only use as a newline character in git-handled repos. There's an option to auto-convert:

$ git config --global core.autocrlf true

当然,这是说把crlf转为lf,而你想把cr转为lf.我希望这仍然有效......

Of course, this is said to convert crlf to lf, while you want to convert cr to lf. I hope this still works …

然后转换您的文件:

# 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 在手册页中有描述.

core.autocrlf is described on the man page.

这篇关于git-diff 忽略 ^M的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆