すべての行を変更せずに、特定の行から改行 (^M) を削除する

すべての行を変更せずに、特定の行から改行 (^M) を削除する

かなり長い C++ ファイルがあり、約 15 行に git diff --checkいくつかの改行があると報告されています。これは Windows 7 マシンで発生しています。Visual Studio のや Notepad++ の EOL 変換など、いくつかのソリューションを検索したところ、Git が問題としている行だけでなく、すべての行が変更されているようです。この結果、git diff ですべての行が置き換えられます。^MAdvanced Save Options

^Mこれは、これらのファイルに対する以前のすべての変更にもキャリッジ リターンが含まれていて、以前のコミットでキャリッジ リターンの警告が無視されたためでしょうか。

実行するとgit config core.autocrlftrue が返されますが、ファイルをgit diff --cached --checkステージングした後にそのファイルに対して実行しても何も起こりません。

これらを削除する方法はありますか? 手動で行に移動して変更しようとしても、役に立たないようです。

答え1

15行ですか?

Notepad++ で、置換を選択します。拡張を選択します。\r (^M) を検索し、何も置換しません (改行が必要な場合は \n に置換します)。すべての ^M を置換するわけではないので、すべて置換を押さずに、置換するものだけを選択します。

通常の Windows メモ帳を使用すると、^M はボックスとして表示されます。ボックスは削除できます。見苦しいですが、機能します。

答え2

使用dos2unix <file>コマンドラインの場合。必要な行末を修正するか、何も必要ない場合は何もしません。find . -name "*.cpp" -exec dos2unix {} +複数のファイルを実行するには、 を実行します。次に、git diffコミット前と比較します。

ファイル内で行末が混在しないようにすることが最善です。マージや履歴の追跡が面倒になる可能性があります。

一部のエディターはスタイルを変更しませんが、ファイルに ^M が 1 つでも含まれている場合は、一部のエディターは DOS スタイルであると想定し、ファイルを書き込むときにすべての行末を変更すると思います。

通常、エディターの設定を見つけて、希望するスタイルにエディターを固定することができます。行末とタブの設定も、通常はスタイルに応じて設定されます。

答え3

Git では、 を使ってこれを自動的に実行できますgit config --global core.autocrlf trueしかし、それはチェックアウト時またはコミット時に行われます。したがって、git はステージングされた変更を表示しませんが、エディターが不要な新しい行末を導入した場合は、静かに変換を処理する必要があります。

不要な行末がすでにリポジトリ内にある場合は、dos2unix を使用することをお勧めします。

詳細については、次の回答を参照してください。 https://stackoverflow.com/questions/10418975/行末の設定を変更する方法読んでhttp://git-scm.com/book/en/Customizing-Git-Git-Configuration#Formatting-and-Whitespace

答え4

Windows マシンでは、たとえば次のように実行できます。

for /r %f in (*.js) do "c:\Program Files\git\usr\bin\dos2unix.exe" %f

これにより、現在のディレクトリから.js拡張子を持つすべてのファイルからCRが削除されます。

関連情報