分散バージョン管理システムの利用は拡大しています。そのなかでも最も人気のあるツールはGitでしょう。しかし、GitをWindowsで使うのはなかなか困難でした。
Windows向けのGitであるmsysGitは、bashのコンソールを出して、最小限のUnix風コマンドライン環境を提供するものです。これは使いやすくありません。もう一つの選択肢であるTortoise Gitは、Windowsのエクスプローラー(ファイルマネージャ)に統合されたGUIツールですが、僕は「なんか違うな」と感じてました -- これは個人の感性の問題ですが、ファイルマネージャに横付けすることが、分散バージョン管理システムへの良いUIを提供するようには思えないのです。
ところが、最近は事情が大きく変わっています。使いやすいGUIツールとして、2013年6月に正式公開されたSourceTree for Windowsが存在します(ちなみにMac版もありますね)。2014年1月29日に発表された最新のバージョン1.4ではちゃんと日本語化されています。僕にとっては、GitもMercurialも両方サポートしているのがすごくうれしいのですが、Git専用で使っても優れものです。
コマンドラインツールであるmsysGitも、最近はGit for Windowsと呼ぶらしく、着実に進化しています。GUIツールのSourceTreeだけでもGitの操作を完全に行えますが、Gitに関する説明や例示ではコマンドラインが使われますので、学習の過程ではコマンドラインツールも必要だと思います。いきなりGUI画面に向き合っても、何をしていいかサッパリ分からないでしょう。
というわけで、Git for WindowsとSourceTreeの両方をインストールして、好みに応じてどちらかを中心に使う、というやり方で、WindowsにおけるGit利用は十分快適になります。
内容:
関連記事:
[追記 date="2015-09-23"]
- Git for WindowsサイトのURLが https://git-for-windows.github.io/ に変わりました。修正しました。
- Git for Windowsの現時点(2015年9月)での最新バージョンは Version 2.5.2 です。
- SourceTreeの現時点(2015年9月)での最新バージョンは Version 1.6.21 です。
- ソフトウェアのバージョンは変わりましたが、この記事の内容は現時点(2015年9月)でも通用します。
[/追記]
Git for Windowsのインストール
Git for WindowsもSourceTreeも、Windowsインストーラーによりインストールできて、コントロールパネルの管理下になります。インストールもアンインストールも簡単です。なにか間違ったときは再インストールすればいいので安心です。
Git for WindowsとSourceTreeを併用する場合、Git for Windowsを先にインストールしたほうが若干の手間が省けます。なので、先にGit for Windowsをインストールすることにします。
Git for Windowsのホームページからインストーラーをダウンロードできます。
僕は、最新版の一つ前のGit-1.8.4-preview20130916.exeをダウンロードしました。
インストールに難しいことは何もありませんが、Git for Windowsをデフォルトでインストールすると、ほとんどの人には不便な状況になってしまうので注意が必要です。
まずは、Select Components。
ここはデフォルトのままでもかまいませんが:
- bashコンソールを使う人は、Additional iconsを選んでおいたほうが起動に便利です。僕は、On the Desktopのアイコンを置いています。これは、<Gitのディレクトリ>\bin\sh.exe --login -i を実行するショートカットです(sh.exeとbash.exeは同じ)。
- Windows Explore integrationはあっても害はないですが、SourceTreeと併用するなら出番はないと思います。
- 他の設定も余計なお世話なんで僕はオフにしてますが、お好みしだいです。
さて、問題は次のAdjusting your PATH environmentです。
デフォルトはUse Git Bash onlyですが、これは使いにくいのでダメです。Run Git from the Windows Command Promptに変更しましょう。こうすると、cmd.exe、PowerShell.exe、MinGW/MSYSのbash.exeなど、他のコマンドラインシェルからもGitコマンドを使えるようになります。
ここの設定はPATH環境変数に対するものですが、次の2つの場所をPATHに含めるかどうかを決定しています。(環境変数をよく知らない人は、ここは気にしなくていいです。)
上記の設定をすると、<Gitのディレクトリ>\cmd\ がPATH環境変数に設定されます。ただし、<Gitのディレクトリ>\cmd\git.exe は単なるランチャーなので、Gitのディレクトリのファイル群がないと動作しないことに注意してください。
これで、Git専用のbashコンソールを起動することも、お好みのコマンドラインシェルからGitコマンドを使うことも出来るようになりました。
cmd.exeでの例:
C:\Users\hiyama>git --version
git version 1.8.4.msysgit.0C:\Users\hiyama>
SourceTree for Windowsのインストール
次のダウロードページを開くと自動的にダウロード状態になります(手動でクリックするリンクもあります)。
インストーラーファイルSourceTreeSetup_1.4.0.exeを実行してインストールします。必要なら、.NET Frameworkのインストールとかも行われます。インストールのとき色々と聞かれますが、後からでも変更できるので気にする必要はありません。
先にインストールしたGitの場所を聞かれる可能性がありますが、そのときは <Gitのディレクトリ>\bin\ (だったか、<Gitのディレクトリ>\bin\git.exe ファイルだったか)をインストーラーに教えてやればいいのです。その画面のスナップショットを撮ろうとしたのですが、二度目のインストールだとスキップするらしく、画面が出てきませんでした。http://blog.aotak.me/post/67349113824/sourcetree-tutorial-1 から似た画面を拝借すると:
- 現在は日本語化されています。
- 上から2番目の項目を選んで、Gitのある場所を指定します。
- 一番上の「SourceTree専用のGitを使う」にしても差し支えはありません。Gitを二つインストールするので無駄はありますが。
コマンドライン+GUIツール
SourceTreeが素晴らしいのは、GUIの画面がほぼGitのコマンド群に対応していることです。それにも関わらずUIとしても自然にまとまっています。
ざっと説明すると:
- ツールバーの左端の「新規 / クローンを作成する」は git init、git cloneに対応しています。
- ツールバーの右端の「設定」は git config に対応しています。
- その他のツールボタンも、コマンドとの対応が分かりやすいですね。
- 一番左のペインは、リポジトリの一覧です。
- その隣の縦に細長いペインは git status、git branch、git tag、git remoteに対応しています。
- 右のほうに位置するいくつかのペインは、git log、git show、git status、git diffなどの出力に対応します。
SourceTreeは、他のツール(例えば、コマンドラインからのgit)による変更も検出して画面を最新状態に更新してくれます。これにより、gitコマンドの実行が、インデックス(ステージングエリア、プリコミット)やリポジトリのコミット家系図(有向グラフ)にどのような影響を及ぼすかを視覚的に確認することができます。
「インデックス」や「コミット家系図」が何であるかを今は知らなくてもかまいません。そのような概念を理解するときに、SourceTreeが大いに助けになるということです。
Gitを学習する際の注意点
複数のリポジトリの編成(相互関係)をどうするか? ブランチの用途と命名規則は? どのようなワークフローにするか? などは全てGitの運用上の問題です。Git自体は、単なる道具であり使い方を規定するものではありません。個々の基本機能は比較的単純です。しかし、その組み合わせ方は無限の可能性があります。この柔軟性・自由度の高さは(一部の人に敬遠される要因ともなってますが)、Gitの大きな特徴/メリットです。
バージョン管理(リビジョン管理)のベストプラクティスのような知識も大事でしょうが、それより前に、コミット(リビジョン)、ブランチ、マージ、プルとプッシュのような基本的な概念と機能を理解しておいたほうがいいでしょう。そうでないと、自分が何をやっているかがアヤフヤなままに使い続けることになります。
SubversionやMercurialを使った経験があればGitの習得に有利と言われることがありますが、これはどうなんでしょうか? 僕はそうとも言えないと思っています。
例えば「ブランチ」の概念は、SubversionとGitでは全く違います。呆れるくらいに違います。同じ言葉を使っていても別物だと考えるべきです。Subversionのブランチは、出来れば使いたくない面倒なものです。一方Gitのブランチは、それなしでは作業ができないほどに本質的な機能です。
Gitのブランチは、同類の分散バージョン管理システムであるMercurialのブランチとも違います。Mercurialでは、ブランチの操作をかなりの程度自動でやってくれます。Gitはそうではありません。これは優劣の問題ではなくて、ポリシーとメカニズムが違うということです。
ブランチは、Gitのなかで最も重要でありながら最も分かりにくい概念でしょう。表面的な言葉に騙されず、先入観を持たず、SourceTreeの視覚的表示(樹形図)の力を借りながら学習するのが、理解への一番の近道です。
そんへんの詳しいことはまたの機会に述べるかも知れません。