QA@IT

Visual Studio Git 「未変更のものと比較」が全て変更状態に

7184 PV

Visual Studio 2013でソース管理にGitを使用しています。
ソースコード変更後、ソリューションエクスプローラー上で対象のファイルを右クリック→「未変更のものと比較」とすると、
変更した箇所の差分が表示されます。
ところが、いつの頃からか一箇所だけ変更しても全体が変更しているとして表示されるようになってしまいました。

SourceTreeというGitクライアントでは変更した箇所だけ差分表示されます。
Productivity Power ToolsやVS Commandsといった拡張機能をインストールしていますが無効にしても変化ありません。

何かご存知ではないでしょうか。
よろしくお願い致します。

(追記)
ファイル-保存オプションの詳細設定でエンコードを変えて動作を試して気づいたのですが、
C:\Users[PC名]\AppData\Local\Temp\TFSTempというところに変更前の一時ファイル(vctmp9999_99999.vbの様な名前)ができて、
それと現在のソースを比較してるようなのです。
(ただし一時ファイルは通常見えません。シフトJISにしたソースファイル読み込み時にエンコードのエラーが発生して偶然発見出来ました。)
その一時ファイルの改行がLFになってました。
でも、実際に編集しているソースはCR+LFです。
試しにLFでソースファイルを保存すると正常に差分が表示されました。

しかし、xssやxscはCR+LFです。VisualStudioの規定値もCR+LFだったと思いますし、わざわざLFに変えるのも
対応としておかしいと思います。
設定で改行を無視するか、一時ファイル作成時の改行をCR+LFにできればいいのですが・・・。

  • どんなファイルでもそうなりますか?ファイルの文字コードがちょっと気になりますね。UTF8ならBOMの有無も気にしてみるといいかもしれません。 -
  • ありがとうございます。
    vbはだめですが、xsdやxscは大丈夫でした。http://blog.shibayan.jp/entry/20130529/1369816283を参考に.gitattributesの「*text=auto」の行を消してもだめでした。
    保存しなくても変更した時点で全部変更した扱いになるので、「未変更のものと比較」で使用される差分ツールがおかしい気もします。
    -

回答

原因はバイナリだと思われてるからだと思うんですが、契機が謎ですね。最初の方に漢字があるとかかな。

普段Mercurialしか使ってないので、外してるかもしれませんが

.gitattributes

*.vb -diff

が無いか確認してあったら削除。

無ければ

*.vb +diff

を追加してみるといいかもしれません。

Git のカスタマイズ - Git の属性

のバイナリファイルの特定のところですね。

編集 履歴 (0)
  • 奥が深いですね・・。
    *.vb -diff試してみましたが残念ながら変化ありませんでした。
    もしかしたら改行が問題なのかもしれないと思いだしました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。