9

中サイズの Java ファイルがあります。自分のファイル BuildTable.java に変更を加えるたびに、Git はそれを大規模な変更として報告します。BuildTable.java は約 200 行あり、このコミットでの変更は 1 行だけ変更されました。

git-diff はこれを出力します:

--- a/src/BuildTable.java
+++ b/src/BuildTable.java
@@ -1 +1 @@
-import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file
+import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file

git-commit -a を実行した後

Created commit fe43985: better error notifications
 3 files changed, 54 insertions(+), 50 deletions(-)
 rewrite src/BuildTable.java (78%)

Git はこのファイルをバイナリか何かとして認識していますか? これは問題ですか?もしそうなら、どうすればこれを修正できますか?

4

4 に答える 4

27

明らかに、gitはmacスタイルの行末を好みません(CRのみ)。そのdiffアルゴリズムは、行区切り文字としてLFを使用します。

Windowsスタイル(CR LF)またはUNIX(LFのみ)の行末を持つようにファイルを修正します。

于 2008-10-28T20:24:15.283 に答える
20

これを修正するために、コアの git 設定を変更する必要はありませんでした。生成されるデフォルトの行末は問題なく、この特定のファイルが破損しているだけだったからです。それを修正するために、vimを開いて次のコマンドを実行しました

:%s/^M/\r/g

「^M」を入力するには、ctrl-V を入力してから ctrl-M を入力する必要があることに注意してください。

于 2008-10-30T19:17:00.143 に答える
4

core.autocrlfとで設定core.safecrlfgit-configます。これにより、git はオブジェクト ストアとの間で転送するときに行末を自動的に変換します。「新しい」エンディングを保存するには、コミットが必要になる場合があります。

貼り付けた例から判断すると、「古いスタイルの Mac 行末」に苦しんでいる可能性もあります (ヒントについてはddaaCharles BaileyCRに感謝します) LF。これが正しい場合 (16 進エディタで確認してください)、適切なUnix のみの行末recodeなど、このガベージを 21 世紀の形式に変換するようなツールを使用してください。LF

于 2008-10-28T20:40:28.603 に答える
0
git diff -b

違いを表示するときに、行末の変更を無視します。

于 2009-11-29T07:28:52.257 に答える