Gitは、小さな変更を加えるたびにファイルの1つを書き換えていると考えています
質問
中サイズのJavaファイルがあります。 BuildTable.javaのファイルの1つに変更を加えるたびに、Gitは、たとえ1行または2行であっても、大きな変更として報告します。 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はこのファイルをバイナリまたは何かと見なしていますか?これは問題ですか?もしそうなら、どうすれば修正できますか?
解決 2
これを修正するために、コアのgit設定を変更する必要はありませんでした。デフォルトの行末が生成されるので、この特定のファイルが破損しただけです。修正するには、vimを開いて次のコマンドを実行しました
:%s/^M/\r/g
" ^ M"と入力することに注意してください。 ctrl-Vと入力してからctrl-Mと入力する必要があります。
他のヒント
明らかに、gitはあなたのmacスタイルの行末を好まない(CRのみ)。 diffアルゴリズムは、LFを行区切り記号として使用します。
ファイルをWindowsスタイル(CR LF)またはunix(LFのみ)の行末に修正します。
core.autocrlf
および core.safecrlf
を git-config
。これにより、gitはオブジェクトストアとの間で転送するときに行末を自動的に変換します。 " new"を保存するためにコミットする必要があるかもしれません。エンディング。
貼り付けた例から判断すると、「古いスタイルのMacの行末」にも苦しんでいる可能性があります。 ( ddaa および Charles Bailey (ヒント))、これは、 LF
のない裸の CR
のみで、gitで処理されないケースです。これが当てはまる場合(16進エディターで確認)、 recode などのツールを使用しますcode>
を使用して、このごみを適切な LF
のみのUnix行末などの21世紀の形式に変換します。
git diff -b
違いを示すときに、行末の変更を無視します。