4

最近、次の設定で .gitattributes ファイルを ac# リポジトリに追加しました。

*            text=auto
*.cs         text diff=csharp

これらの github の指示に従ってリポジトリを再正規化したところ、問題なく動作するように見えました。

私が抱えている問題は、いくつかのファイル (すべてではない) をチェックアウトすると、実際のコードに多くの奇妙な文字が混在していることです。lf->crlf上記の .gitattributes ファイルで指定された変換によってgit がファイルを実行すると発生するようです。

メモ帳++によると、めちゃくちゃになるファイルは使用UCS-2 Little EndianまたはUCS-2 Big Endianエンコードされています。問題なく動作するように見えるファイルは、ANSIまたはUTF-8エンコードされています。

参考までに、私の git バージョンは1.8.0.msysgit.0で、OS は Windows 8 です。

これを修正する方法はありますか?ファイルのエンコーディングを変更するだけで十分でしょうか?

4

2 に答える 2

3

これは、すべての文字が 2 バイトであるエンコーディングを使用する場合に発生します。
CRLF は としてエンコードされ\0\r\0\nます。

Git はこれを 1 バイト エンコーディングと見なし、それを\0\r\0\r\n.
これにより、次の行が 1 バイトずれて、1 行おきに中国語でいっぱいになります。(\0上位バイトではなく下位バイトになるため)

この LINQPad スクリプトを使用して、ファイルを UTF8 に変換できます。

const string path = @"C:\...";
foreach (var file in Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories))
{
    if (!new [] { ".html", ".js"}.Contains(Path.GetExtension(file)))
        continue;
    File.WriteAllText(file, String.Join("\r\n", File.ReadAllLines(file)), new UTF8Encoding(encoderShouldEmitUTF8Identifier: true));
    file.Dump();
}

これは壊れたファイルを修正しません。16 進エディタで に\r\n置き換えることで、ファイルを修正できます。\nそのためのLINQPadスクリプトはありません。(s には簡単なReplace()方法がないためbyte[])

于 2012-12-04T14:24:25.313 に答える
0

これを修正するには、ファイルのエンコーディングを変換するか (UTF-8 で問題ありません)、改行の自動変換 (git config core.autocrlf falseおよび .gitattributes のもの) を無効にします。

于 2012-12-04T14:33:36.600 に答える