WindowsでのGit環境構築


最近漸く「じっと」って言わなくなってきた。

色々やってみた結果、msysgit+posh-gitを入れてPowerShellでGitを弄るのが楽で便利ということになった。
で、どうやってその環境を構築するかって話を以下に。
ちなみにWindows8Pro64bit日本語版(コミケのMSブースで買った)で、OS入れた後VisualStudio2010入れただけのほぼ素の状態からやってます。
まぁWindows7でも大した差はないと思う。

後Cygwin入れるのは負けだと感じる人向け。

##[Chocolatey](http://chocolatey.org/)のインストール

ChocolateyというのはPowerShellでのパッケージ管理アプリケーション。
MacPortsとかHomebrewとかの同じものですね。
要PowerShell2.0以上。

PowerShellを管理者権限で起動します。
で、以下のコマンドを入力。

```PowerShell:実行ポリシーの変更
> Set-ExecutionPolicy RemoteSigned
```

もう実行ポリシー弄ってるって人は弄らなくてもいい。
これに関して詳しいことは[ここ](http://www.atmarkit.co.jp/fwin2k/operation/psh02/psh02_01.html)を見て下さい。
後、`-Scope CurrentUser`を入れるかどうかは各自適当に。

で、そのままでも新しいPowerShellを立ち上げてもいいので、以下のコマンドを実行。

```PowerShell:Chocolateyのインストール
> iex ((new-object net.webclient).DownloadString("http://bit.ly/psChocInstall"))
```

これでChocolateyがインストールされます。
`cinst`コマンドが起動出来ればOK。

`clist hogehoge`でインストール出来るパッケージを検索、`cinst hogehoge`でパッケージインストール、`cuninst hogehoge`でアンインストール、`cup hogehoge`とか`cup all`でアップデートです。
あと、`cver all -localonly`で今入っているパッケージとそのバージョンが表示されます。

パッケージの検索については、[ここ](http://chocolatey.org/packages)で検索してもいいと思う。各パッケージのインストールコマンドが書いてあるのがいい。

##[msysgit](http://code.google.com/p/msysgit/)のインストール
Chocolateyがあるのでインストールは簡単。

```PowerShell:msysgitのインストール
> cinst msysgit
```

これでmsysgitはインストールされる。

###git-cheetahの解除

普通にmsysgit入れてると右クリックにGit Hereとかなんか色々なメニューが増える。
これがうざったいって人はPowerShell(かcmd)で以下のコマンドを打つ。

```PowerShell:gitcheetahの解除
> cd "C:\Program Files (x86)\Git\git-cheetah"
> regsvr32 /u git_shell_ext64.dll
```
32bitOSの場合だとちょっと違うかもProgram Files (x86)→Program Filesとか。
regsvr32に渡すdllのファイル名が違う場合があるかもしれないが、そのフォルダに一つしかないと思うのでそのdllを指定すればいい。

regsvr32コマンド打ったらなんか解除されましたってウィンドウ出るのでそれでOK。

###環境パスの設定

gitコマンドが打てる様に、`C:\Program Files (x86)\Git\bin\`のパスを通す。
PowerShellで`$profile`を打つと、zshで言う.zshrcのファイルのフルパスが表示されます。
`start $profile`でファイルを開くなり、なかったら作成するなりして中に以下コマンドを書く。

```PowerShell:gitのパス設定
$Env:Path += ";C:\Program Files (x86)\Git\bin\"
```

PowerShellを起動しなおせばgitコマンドが打てる様になってます。

あと`ssh-keygen`でフォルダ指定がおかしくならないように以下も追加しましょう(多分他のコマンドでもおかしくなる場合がある)。

```PowerShell:gitのパス設定
$Env:HOME = "C:\Users\(User名)"
```

##gitの設定

Windowsで日本語どう扱うか周りを主に。
emailとかnameとかのよくある最初の設定は書いてないです。
そこら辺はgit入門的なサイト調べてみて下さい。

###日本語の表示

gitをWindowsで日本語表示するためにする設定諸々。

```PowerShell:gitの設定
> git config --global core.quotepath false
> git config --global core.autoCRLF false (or true or input)
```

quotepathはgitコマンドで日本語を表示する際にエスケープ表示しないようにするため。
autoCRLFはリポジトリからローカルにファイルをpullする時、pushする時の改行コードの変換をどうするか。
詳しい内容は以下のページを見て下さい。
[Git のカスタマイズ - Git の設定:書式設定と空白文字](http://git-scm.com/book/ja/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%81%AE%E8%A8%AD%E5%AE%9A#書式設定と空白文字)

後、なんだかんだでgit guiやgitkは使う事があると思うので表示がおかしくならないように設定しておく。

```PowerShell:gitguiの設定
> git config --global gui.encoding utf-8
```

ココらへんの設定は`C:\Users\(User名)\.gitconfig`に書いてあります。
WindowsのNotepad(メモ帳)だと.gitconfig等のgitの設定が改行コードの関係でちゃんと見えないので、なんかエディタ入れましょう。
Chocolateyあるし`cinst sublimetext2`とか`cinst xyzzy`とか打てばエディタのインストールも簡単にできます。

##[posh-git](https://github.com/dahlbyk/posh-git)のインストールと設定
posh-gitはPowerShellでGitを使いやすくするパッケージ。
コマンドTabによる補完とか、プロンプトにGitのブランチ名やステータスを表示するとかしてくれます。
msysgitのgit bashでもやってくれるんだけど、posh-gitの補完の方がちょっと便利です。

インストールはChocolatey(ry

```PowerShell:posh-gitのインストール
> cinst poshgit
```

このままでも使うことが出来ますが、プロンプトの表示とか弄りたいときに面倒な場合があります。
`start $profile`で設定ファイルを開くと分かるのですが、以下のコマンドが追加されています。

```PowerShell:設定ファイルの追加部分
# Load posh-git example profile
. 'C:\tools\poshgit\dahlbyk-posh-git-198f2ab\profile.example.ps1'
```

このprofile.example.ps1に色々書いてあるので、最初の一行(`Push-Location (Split-Path -Path……`)を除いた部分をコピペして上記の部分と差し替えるのもありです。
その場合、下記の場所だけちょっと書き換える必要あり。

```PowerShell:設定ファイルの修正部分
……
# Load posh-git module from current directory
# ここを書き換える
Import-Module C:\tools\poshgit\dahlbyk-posh-git-198f2ab\posh-git

# If module is installed in a default location ($env:PSModulePath),
# use this instead (see about_Modules for more information):
# Import-Module posh-git


# Set up a simple prompt, adding the git prompt parts inside git repos
function prompt {
……
```

書き換えるフォルダは、設定ファイルの追加部分に書いてあるフォルダになります。
これで設定ファイルにプロンプトの表示を弄る関数が書かれるので、プロンプト弄りたいときに設定ファイル弄るだけでよくなります。
とりあえずこれでPowerShellを使ってgitを色々弄ることができると思います。

##難点

この設定でほぼ問題無いですが、文字化けする箇所があって`git add`とかで特定のファイルをaddするためにTabで補完かけようとすると文字化けする。
もちろんaddは出来ない。

どうしてもそうしたいなら、全部手で打つか、git gui使うしかない。
`chcp 65001`を打てばいいと言われるかもしれないが、フォント設定周りの挙動が非常に怪しい。

なんで、その方法はここに記載していない。

※2013/01/31追記
そうそう。この設定だとS-JISのファイルをgit guiやgit diffとかで見ると日本語が文字化けします。
`git config --global gui.encoding`の値をS-JISにすればgit guiでは見えると思いますが、今度はUnicode部分が文字化けする。
どっちかしか(しかもS-JISの方がダメ感高い感じで)見えない頑固な奴なので。
なんで、WinMergeとかのソフトをDiffToolに設定してgit difftoolとかしたほうが平穏な感じはする。

この他の設定やら入れたアプリケーションは別記事として書いていこうと思います。