SourceTreeとGitではじめるバージョン管理 #1

このエントリーをはてなブックマークに追加

以前、創作活動をしている人のためのバージョン管理入門 という記事を書いた。導入だけやってまだ踏み込んだ使い方の記事書いてないなーと思って続き書こうとしたんだけど、最近SourceTreeというバージョン管理クライアントを使ってみたらめっちゃ使い勝手が良かったのでそれの紹介します。

バージョン管理システムって?

ファイルの変更履歴を記録して、後から読み返したり、履歴間の差分を出したりするためのシステムのこと。

  • SubVersion
  • Git
  • Mercurial

とかがある。

個人で使うならGitやMercurialが便利。

今回はGitを使う。

SourceTree

Windows 7以降でGitを使うならSourceTreeがおすすめ。メニューは英語表示で日本語化されてないけど、使い方を一度覚えてしまえば大丈夫。

SourceTree

ダウンロードして、インストールする。

Windows XPなんだけど……

GitHub for WindowsというGitHubのクライアントアプリを使おう。ローカルでも使えるし、GitHub以外でも使える。

使い方は後日。

インストール

インストーラも英語。

Nextを押す。

インストール先を変えたい場合は変える。Nextで進む。

Install押してインストール。

Finishを押すとSourceTreeが起動する。

セットアップ

初回起動時は初期設定のダイアログが開く。

と思ったらすぐに次のダイアログが開いたと思う。

Gitがインストールされてないか、インストール済みのGitが見つからなかったときにこれが表示される。Gitを使うので一番上をクリックする。

Gitのインストールが終わったら今度は別のダイアログが開いたと思う。

Mercurialがインストールされてないか、インストール済みのMercurialが見つからなかったときにこれが表示される。今回は別にMercurialは使わないので一番下をクリックする。インストールしたい人は入れてもいいと思う。

さて、最初のダイアログに戻ってきた。

User informationを入力する。これはバージョン管理システム上で誰が編集したのか分かるようにするために必要な情報で、バージョン管理システムは多人数で利用することを想定しているのでそうなっている。 Full nameとあるけどここで入力された名前が表示されるという話なので、区別できる名前ならなんでもいいと思う。HNとか。名前を入れたらEmail addressにメールアドレス入れる。User informationの下に二つチェックボックスがあるけどこれはそのままでいい。その下、I agree to ~ にチェック入れて、Nextを押す。

次にこんなダイアログが出てくる。

特定の拡張子やフォルダをバージョン管理時に除外するように共通設定を登録しておこうか?と聞いてくれている。これは後で変更できるのでYesを選ぼう。

この設定はマイドキュメントの中のgitignore.txtというファイルに書かれている。どんなファイルが除外されるのか知りたい人は見てみるといいと思う。

次。

SSH Client Configurationっていうのは、GitはSSHで通信できるからどのクライアント使って通信するか設定してねってこと。とりあえず推奨されているPuTTYを使えばいいので、そのままNextを押す。

Load SSH Key?とか聞かれる。たぶんSSHで使う鍵ファイルなんて持ってないと思うのでNoを押す。

最後。

BitBucketとかGitHubのアカウントがあったらここに入力すると連携できる。なければそのままFinish(アカウント情報が入力されてなくてもアカウントのチェックをしようとすると思うんだけどSkipしてしまおう)。

これでようやくSourceTreeのウィンドウが起動する。

リポジトリを作る

バージョン管理する場所のことをリポジトリと呼んでいる。バージョン管理をはじめるにはまずリポジトリを作るところから始める。

ツールバーの一番左にあるClone / Newというボタンを押すとリポジトリの作成画面が表示される。Clone Repositoryタブでリポジトリの複製を作れるんだけどまだリポジトリがないのでNew Repositoryタブを選ぶ。

Repository TypeはGitになってるのでそのまま。Destination Pathはリポジトリを作成するフォルダの場所を入力する。入力したらCreateをクリック。

これでリポジトリができた。

最初のファイルをコミットする

せっかくリポジトリを作ったので、何かファイルをバージョン管理システムに登録してみよう。

リポジトリのあるフォルダに、テキストファイルを作る。readme.txtとした。リポジトリを誰か他の人に公開するなら、readmeがあったほうがいいからね。

readmeに何か書いて保存しよう。

SourceTreeのウィンドウを見ると、Working Copy Changesというところに、readme.txtが追加されていると思う。右側を見ると、そのファイルの内容が表示されているはず。

readme.txtを選んで、Working Copy Changesの左にある↑アイコンをクリックする。

Working Copy ChangesからStaged Changesにreadme.txtが移動した。

Working Copy Changesというのは、作業フォルダ内で変更のあるファイルの一覧で、Staged Changesというのは、これからバージョン管理に登録する変更内容の一覧になっている。Working Copyから登録したいファイルを選んでからバージョン管理に登録するという流れになっていると思ってもらえばいい。この作業をステージングするとかインデックスに追加するとか言ったりする。

さて、それじゃあ実際にバージョン管理に登録しよう。バージョン管理に編集内容を登録することをコミットと呼ぶ。 ツールバーの左から二番目に、Commitというボタンがあるので、これがコミットするボタンだ。これを押す。

コミットウィンドウが開く。

Commit messageに編集内容の要約を書く。これは必須。後から読み返すときに分かるようにするために書くものなので、分かるように書く。

コミットする内容が複雑になるとそれだけ書くことが複雑になるので、コミットする内容をシンプルに保つのがいい。メッセージもシンプルで済む。こまめにコミットしたり、ステージングするときに関係のないファイルを選ばないようにすれば、コミット内容はシンプルにできる。

ほかのバージョン管理クライアントとかだとここに日本語が書けなかったりすることがあるけど、SourceTreeでGitを使うときは日本語でメッセージが書ける。広く公開するなら日本語が読めない人のためには英語で書いた方がよかったりするけど、個人的に使うだけなら日本語でいいと思う。

メッセージを書いたら右下のCommitを押す。

これでコミットできた。

コミットの流れは、

  • ワーキングコピーからステージングして
  • コミットメッセージを書いて
  • コミット

というふうになる。そんなにむずかしくはないよね。手順を覚えるためにも、もう一度コミットしてみよう。

まずはreadme.txtを開いて、適当に内容を編集する。

ワーキングコピーに編集したファイルが表示されるので、ステージングする。

コミットメッセージを書いてコミット。

ほら、そんなにむずかしくない。

ちょっとぎこちないなって感じてる人でも、きっと数をこなしているうちに慣れる。手順がシンプルだから、数こなすのそんなに苦にならないと思う。

履歴を見る

せっかくコミットしたので履歴を見てみよう。

下の方にLog / Historyというタブがあるのでこれをクリックする。そうするとこんなふうに表示されると思う。

上のペインは履歴一覧で、さっきのコミットが選択されている。下のペインは履歴の内容で、左下がファイル一覧、右下が以前のバージョンからの変更内容になっている。こんなふうにファイル毎に差分を表示できるので便利。

さて、それじゃあ履歴一覧から、前のバージョンを選択してみよう。

履歴の内容が変わったかな。こんなふうにコミット毎の履歴が見える。

以前のバージョンに巻き戻す

ただ履歴を表示するだけじゃなくて、バージョンを巻き戻したりできる。

一覧から以前のコミットを選んで右クリックして、Checkoutを選ぶ。

確認ダイアログが出てくる。detached HEADになるよという警告ダイアログなんだけど、これについての説明は今度するとして、今回はバージョンの巻き戻しを試したいだけなので、OKを選ぶ。

こんな感じ。 readme.txtを開いてみよう。前のバージョンの内容に書き換えられているのが分かると思う。

やっぱり最新のバージョンに戻したくなっちゃった……というときは最新のコミットを選んで右クリックしてCheckout。元に戻りました。readme.txtを開くと、やはり最新バージョンの内容になっている。

こんな感じで、チェックアウトを使ってバージョンを行き来できる。

とりあえず今回はここまで。次回はブランチの使い方を説明したい。

おつかれさまでした。

8 Notes

  1. teracy-blog reblogged this from aotak-note
  2. aotak-note posted this