

環境移行にともない新PCにGit、SourceTree、VisualStudioをインストールし  
リポジトリからクローンをしたところ、タイトルの事象が起きました。  
旧環境では発生していません。

旧環境  
Windows Server 2012 R2 Standard  
Git 2.6.1.windows.1  
SourceTree 1.9.5.0  
VisualStudio Premium 2013 Version 12.0.40629.00 Update 5  
新環境  
Windows Server 2012 R2 Standard  
Git 2.6.3.windows.1  
SourceTree 3.4.7  
VisualStudio Premium 2013 Version 12.0.21005.1 REL

新環境にてSourceTreeでクローンしたものをVisualStudioのチームエクスプローラーで確認したところ  
全てのファイルが変更対象となっており、「未変更のものと比較」したところ一見変更されていない(差分が表示されない)が  
HEADの改行コードがLF、ローカルの改行コードがCRLFとなっていました。

旧環境で同様の操作を行った際は変更対象とならず、  
テキストエディタで確認したローカルのファイルの改行コードはCRLFとなっているので  
HEADもローカルもCRLFとして比較していると思われます。

新環境でも旧環境と同じようにHEADもCRLFとして比較したいのですが・・・

また、調査の中でクローンを作成する際に新環境のVisualStudioでのみLFで作成されるということが確認できました。  
旧環境のSourceTreeにて既存リポジトリを新規フォルダにクローンする  
→CRLFで作成される  
旧環境のVisualStudioのチームエクスプローラー→接続→ローカルGitリポジトリの「複製」で  
既存リポジトリを新規フォルダに複製する  
→CRLFで作成される  
新環境のSourceTreeにて既存リポジトリを新規フォルダにクローンする  
→CRLFで作成される  
新環境のVisualStudioのチームエクスプローラー→接続→ローカルGitリポジトリの「複製」で  
既存リポジトリを新規フォルダに複製する  
→ **LFで作成される**  
※すべて同一の既存リポジトリを対象にクローン(複製)しています)  
※サーバー上のファイルがどちらの改行コードで保存されているかは不明ですが、  
新環境でgit configで確認できるcore.autocrlfはすべてfalseの状態なのでCRLFで保存されている？

おそらくVisualStudioのチームエクスプローラーがgitコマンド(?)を実行する際の  
設定などが新旧で異なっているのが原因と思うのですが、その設定をどこで確認/変更できるのか分からずpostさせていただきました。


CC BY-SA 4.0
2022-07-25T10:22:07.597
90187
2023-05-04T06:12:13.883
2023-05-04T06:12:13.883
4236
53679
question
windows git visual-studio sourcetree
SourceTreeでクローンしたファイルをVisualStudio2013 で確認すると改行コード不一致で変更とされる


gitの設定ファイルは３ヶ所に置かれ、優先順位の高い順に次のようになります。

  * `--local`; `.git/config`
  * `--global`; `~/.gitconfig`
  * `--system`; `/etc/gitconfig`

このうち、`--local`はcloneの時点では存在しないので、`--global`か`--system`のどちらかの設定を見ていることになります。`--global`に設定されている場合はいいのですが、そうでない場合は`--system`を参照することになります。  
UNIX系OSではあまり問題にならないのですが、Windowsには`/etc`がそもそも存在せず、各gitはそれぞれの独自の場所を参照することになります。

SourceTreeとVisual Studioで挙動が異なるということは、SourceTreeとVisual
Studioが使用するgitが異なり、参照する`--system`設定も異なってきていることが原因と思われます。  
具体的には[Process Monitor](https://docs.microsoft.com/ja-
jp/sysinternals/downloads/procmon)を使えばどのファイルにアクセスしたか追跡できます。手元のVisual
Studioでは、`C:\Program Files\Microsoft Visual
Studio\2022\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team
Explorer\Git\etc\gitconfig`と`C:\Program
Files\Git\etc\gitconfig`との両方にアクセスしていました。しかしSourceTreeは前者にアクセスすることはないと思われます。

ともあれ難しく考えることはなく、

[code]

    git config --global core.autocrlf <設定したい値>
    
[/code]

と実行すれば、`--global`に設定を保存でき、どのgitから起動しても同じ結果が得られるようになります。

* * *

> 新環境でgit configで確認できるcore.autocrlfはすべてfalseの状態なので

念のため、あくまでgit configで起動されたgitコマンドから見た結果でしかなく、SourceTreeやVisual
Studioが（特に`--system`設定に関して）同じ設定を見ているわけではない点に気をつけてください。


CC BY-SA 4.0
2022-07-25T13:53:36.653
90190
2022-07-25T13:53:36.653
4236
90187
answer