git-diff 忽略 ^M [英] git-diff to ignore ^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屋!