git diff
タブ文字を含むインデント用のタブを含むコード ベースの変更を見ると、多くのスペースに置き換えられます。でパッチを見るときも同じことが起こりますgit show
。git format-patch
結果のファイルを使用して見ると、cat
すべて問題ないようです。
これらのコマンドは、文字を置き換えることによって壊れた機械可読なパッチを表示するので、何が起こっているのか、そしてこれが起こらないようにするにはどうすればよいのか疑問に思います.
どちらの git コマンドも、制御文字を追加してバイナリ ファイルのカラー出力と外部テキスト変換フィルターを有効にする以外は、出力内の文字を変更しません (特に有効になっている場合)。ただし、出力は通常、ページャーアプリケーションを介してパイプされます。多くの Linux システムでは、デフォルトのページャーはless
であり、タブの代わりになります! この動作は、差分出力をファイルにパイプするか、別のアプリケーションを介して簡単にテストできます。たとえばgit diff | cat
、ページングが原因である場合は、タブをいじらず、タブを表示する必要があります。
ただし、一部の端末エミュレーターもこれを行う可能性があり、パイプスルーcat
はタブの代わりにスペースを「表示」します。これは、 hexdump: のようなものをパイプすることで確認できます。実際のソースコードにタブがある場所にgit diff | hd
0x09 aka の文字が表示されるはずです。\t
git --no-pager [command]
を使用するか、単に出力を 経由でパイプすることにより、ページングを一時的に無効にすることができますcat
。ページャの使用をより恒久的に変更するためのさまざまな設定オプションもあります。たとえば、diff などの特定のコマンドに対してグローバルに無効にすることができます。git config --global pager.diff false