'git diff' が ^M を無視するようにする 質問する

'git diff' が ^M を無視するようにする 質問する

一部のファイルに改行区切り文字が含まれているプロジェクトでは、ファイル全体が 1 行として認識される^Mため、これらのファイルを比較することは明らかに不可能です。git diff

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 に変換する 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

ベストアンサー1

GitHubは提案するgit で処理されるリポジトリでは、改行文字として \n のみを使用するようにしてください。自動変換するオプションがあります:

$ 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.autocrlfについては、マニュアルページ

おすすめ記事