somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Visual Studio】ソースをgitで管理する【vsix】

fsiを用いてF#の勉強していたのですが、複数行入力の際に面倒だったのでVisual Studioに移行しました。

fsiと違ってソースコードが残ることになるので、ソース管理をしようと思いました。そのときのメモです。

これまでの環境

msysgitとVisual Studio 2010 ShellとF#がインストールしてあります。

Git Source Control Provider

Visual Studioからgitクライアントを扱えるようにする拡張機能です。http://gitscc.codeplex.com/からダウンロードできます。

拡張機能

ダウンロードしたファイルの名前は、GitSccProvider.vsixです。この拡張子はVisual Studio Extensionの略だそうです。これをダブルクリックすれば終わりかと思ったのですが、「この拡張機能は、現在インストール済みの製品にはインストールできません。」というエラーが発生しました。

Visual Studio を機能拡張する | MSDNを見ると、以下のように表示されていたので導入しました。

Visual Studio 2010 SDK (英語)

Visual Studio 拡張機能を構築するためのツールおよびテンプレートが用意されています。

Visual Studio 2010 SDK

上記のリンクからダウンロードします。ダウンロードした「VsSDK_sfx.exe」を実行します。

上記全然関係なかったのですが、自分用に打消ししてあります。

対応プロダクトの確認

【ハウツー】Visual Studio 2010の拡張機能を活用しよう【前編】 (1) Visual Studio全般の機能向上、コマンドを追加できるツールを紹介 | エンタープライズ | マイナビニュースにて、ツールについて下記の注意文がありました。

なお、これらの拡張機能はExpress Editionにはインストールできませんので注意してください。

Visual Studio 2010 Shellも対象外なのではと思いました。そこで、vsixの情報を見る方法を探しました。

VSIX Explorer

その名のとおり、vsixファイルを展開して中の情報を見ることができます。インストール方法は以下のとおりです。

  1. ツールタブから、拡張機能マネージャーを選択する
  2. サイドメニューのオンラインギャラリーを選択する
  3. 右上の検索テキストボックスにVSIX Explorerと入力し、検索する
  4. VSIX Explorerを選択し、ダウンロードとインストールを行う
  5. Visual Studioを再起動する

使用方法は以下のとおりです。

  1. ツールタブから、VSIX Explorerを選択する
  2. サイドバー(なにもないですが…)にGitSccProvider.vsixファイルをドラッグ・ドロップする

vsixファイルの中に含まれているものが表示されます。今回、着目するのはextension.vsixmanifestです。以下、対応プロダクトの確認および追加方法です。

  1. サイドバーからextension.vsixmanifestを選択する
  2. Supported Productsタブを選択する
  3. Supported ApplicationsのVisual Studio Version -10.0にShellに関する情報がないことを確認する
  4. Supported Applicationsの下にあるAdd Applicationを押下する
  5. Visual Studio 2010からIntegrated Shellを選択する
  6. Supported ApplicationsのVisual Studio Version -10.0に追加されたことを確認する

まとめると、サポートされていなかっただけです。

インストール

GitSccProvider.vsixファイルをダブルクリックします。今回はエラーが発生せず、インストールできます。Visual Studioを再起動して、インストール確認をします。

設定

以下のとおりに設定します。

  1. ツールタブから、オプションを選択する
  2. Source Cntrolを選択し、現在のソース管理プラグインからGit Source Control Providerを選択する
  3. Source CntrolにGit Source Control Provider Optionsが追加されるので選択する
  4. git関連のツールを設定する。以下のツールの設定ができます
    • git用のshell
    • Git Extensions
    • Tortise Git
    • diffツール

プロジェクトのGit対応

プロジェクトを作成し、ソリューションエクスプローラーに表示される状態にしました。

└─ConsoleApplication1
    │  ConsoleApplication1.sln
    │
    └─ConsoleApplication1
        │  ConsoleApplication1.fsproj
        │  ConsoleApplication1.suo(隠しファイル?)
        │  Program.fs
        │
        ├─bin
        │  └─Debug
        └─obj
            └─x86
                └─Debug

プロジェクトを選択して、右クリックでメニューを表示すると、Git関連の項目が存在しています。

  • Create GitRepository
  • Git
  • Git Pending Changes(無効化状態)
  • Git Reflesh

Gitには、設定したツールに対応する項目が表示されていました。自分の場合、Git Extensions以外の設定をしているので、それらのアイコンとコマンド名が表示されています。addがないので、細かい動作は行えなさそうです。

Create GitRepository

上記のコマンドを実行していきます。まずは、リポジトリの作成です。Create GitRepositoryを押下します。変更された点は以下のとおりです。

  • ソリューションエクスプローラーにBranch名が表示された(master)
  • 下記ファイルのアイコンの先頭に+マークが追加された
    • ConsoleApplication1.fsproj
    • Program.fs
  • ConsoleApplication1(ディレクトリトップ)に下記ファイルが追加された
    • .gitignore
    • .tfignore
  • Git Pending Changesが使用可能になった

.gitignore

以下、内容です。

Thumbs.db
*.obj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.sln.docstates
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.lib
*.sbr
obj/
[Rr]elease*/
_ReSharper*/
[Tt]est[Rr]esult*
*.vssscc
$tf*/

主にVisual StudioやWindowsで作成されるファイルが対象になっています。[]で囲まれている部分は、大文字小文字用です。

.tfignore

以下、内容です。

\.git

Visual Studio用の無視ファイルっぽいです。.gitを\により再帰的に無視するように設定しています。よくわかってないです・・・。詳細はバージョン管理へのファイルの追加 (Team Explorer Everywhere)を参照してください。

Git Pending Changes

保留中の変更一覧を表示するダイアログが表示されます。表示内容は以下のとおりです。

また、すぐコミットができるように以下も用意されています。

  • ボタン
    • commit
    • Amend Last Commit
    • Switch Branch(新規ブランチの作成も可能)
    • .gitignoreファイルを開く
  • コミットコメントを入力するテキストエリア

ファイルを右クリックすると、操作メニューが表示されます。以下の操作を行えます。

  • ファイルのステージング(add)
  • 変更の差分表示
  • 変更を元に戻す
  • ファイルの削除
  • .gitignoreへの追加
    • ファイルのパス
    • ファイルの存在するディレクトリのパス(ディレクトリ名*/)
    • 拡張子

ファイルのステージング後は、現在の状態がaddedになります。この場合、ステージングの代わりに、ステージングを元に戻す操作になります。

コミット後

コミット後のファイルのアイコンは、青い南京錠のようなものです。これに変更を加えて保存すると、赤いチェックマークのアイコンに変わりました。

この状態でGit Pending Changesを見ます。変更されたファイルの状態がmodifiedになっています。このファイルをステージングすると、stagedの状態に変わりました。

変更されたファイルの変更を元に戻してから保存すると、一覧から消えました。ただし、赤いチェックマークアイコンのままです・・・。ファイルを選択して、右クリックメニューGitからUndo File Changesを選択します。青い南京錠のマークに戻りました。

ちなみに、右クリックメニューGitからTortise GitアイコンのShow Logを選択すると、Tortise Gitのログウィンドウが表示され、コミットされていることを確認できました。

削除とAmend

ファイルの削除を試したいので、ファイルをAmend Last Commitで追加します。

右クリックメニューAdd (Above|Below)からNew Itemを選択します。この中からF# Source File(.fs)を作成します。余談ですが、Above|Belowの前後の追加による違いや、fsi(signature)ファイルの意味が分かりません・・・。

Git Pending ChangesからAmend Last Commitで追加後、Show Logを見るとログが増えずにログの内容が変わっていることを確認できました。

削除の前に、念のためコピーをしておきます。その後、さくせいしたファイルを削除してGit Pending Changesを見ます。コピーしたファイルは、コピー ~ File1.fsという名前ですが、Pending一覧では文字化けしていました。削除したファイルの状態はDeletedになっていました。Deletedの状態からステージングするとRemovedになりました。

その他

上記をcommitするとgitでの削除扱いになっていました。また、コピーファイルをソリューションから見る方法が分からなくて困りました。最後に、Gitから選べるmsysgitアイコンのGit Historyが、msysgitのものとは違ってとても見やすく、操作もしやすくなってした。

VSでgitを使えるようになったと思います。BranchやPush/Pullを使うようになったらまた書きたいと思います。