リポジトリの作成と基本的なバージョン管理――SourceTreeで始めるGitバージョン管理入門 第1回

リポジトリの作成と基本的なバージョン管理――SourceTreeで始めるGitバージョン管理入門 第1回

 本記事では、GUIで操作できるGitクライアントであるSourceTreeを使用し、バージョン管理を行う際に必要なリポジトリの作成やリポジトリへのファイルの追加/削除、コミットといった基本的な作業について説明します。

【連載】SourceTreeで始めるGitバージョン管理入門

  • 第1回:リポジトリの作成と基本的なバージョン管理
  • 第2回:タグとブランチ
  • 第3回:国産のGitリポジトリサービス「SourceForge.JP」

本記事について

 本記事は、2014年10月22日にソフトバンク クリエイティブより発売された書籍「デザイナーからプログラマーまで 絶対わかるGitバージョン管理」から、「第2章 バージョン管理はじめの一歩」の一部を抜き出し再構成したものです。

 なお、本書の解説ではMac OS X版のSourceTreeを使用していますが、Windows版の場合でも同じ操作で作業を行うことが可能です。

 出版社ページ / Amazon.co.jpの商品ページ

 大型本: 320ページ、価格:2,500円(税抜)、ISBN: 978-4-7973-8036-1

バージョン管理の基本的な流れ

 Gitでは、リポジトリというデータベースを作成し、そこにファイルや変更履歴を記録していくことでバージョン管理を行います。まずはGitによるバージョン管理の基本的な流れを押さえておきましょう。

Gitによるバージョン管理

 Gitによるバージョン管理は、図1のような流れで行います。まず、適当なディレクトリにリポジトリを作成します。空のディレクトリを新規に作成してもよいですし、バージョン管理したいファイルがあるなら、そのファイルがあるディレクトリにリポジトリを作成しても構いません。ここでリポジトリを作成したディレクトリが作業ツリーのトップディレクトリとなります。

図1 Gitによる基本的なバージョン管理の流れ
図1 Gitによる基本的なバージョン管理の流れ

 なお、Gitでは作業ツリー外のファイルやディレクトリ(作業ツリーのトップディレクトリやサブディレクトリに含まれないファイルやディレクトリ)はバージョン管理の対象にできません(図2)。複数のディレクトリを対象にバージョン管理を行いたい場合、それらのディレクトリを含むディレクトリにリポジトリを作成する必要があります。

図2 Gitリポジトリと管理対象ディレクトリの関係。リポジトリを作成したディレクトリおよびサブディレクトリに含まれるファイルのみがバージョン管理の対象となる
図2 Gitリポジトリと管理対象ディレクトリの関係。リポジトリを作成したディレクトリおよびサブディレクトリに含まれるファイルのみがバージョン管理の対象となる

 リポジトリを作成したら、続いてバージョン管理の対象となるディレクトリ内にバージョン管理したいファイルを作成、もしくはコピーします。ただし、ファイルを作成・コピーしただけではバージョン管理の対象にはなりません。作成・コピーしたファイルをバージョン管理の対象として登録する必要があります。最後にコミットを実行することで、登録したファイルの情報がリポジトリ内に記録されます。

 一度コミットを行った後は、ファイルを編集したり、新しいファイルを追加したり、ファイルを削除する、といったタイミングで再度ファイルの登録とコミットを実行します(図1の3と4の作業)。Gitでは一度登録したファイルに対して変更を加えたら、再度ファイルを登録しないとコミット対象にならないので注意が必要です。また、コミットを実行しないと変更した内容が記録されないので、一定の作業が完了したら必ずコミットを実行するように心がけましょう。

コミットとコミットID

 Gitによるバージョン管理のメリットとして、「いつでも過去のバージョンに復元できる」という点があります。Gitではコミットを実行すると、そのコミットにIDが割り当てられます。このIDは「a」から「f」までのアルファベットと数字からなる不規則な40文字の文字列となっており、「コミットID」と呼ばれます。これを使ってコミットを指定し、そのコミット時点でのリポジトリ内の特定のファイル、もしくはすべてのファイルを復元することが可能です。

 コミットにはバージョン管理対象のファイルに加えた変更点やコミットIDのほか、コミットを実行したユーザーの名前やメールアドレス、実行した時刻、コミットの内容を説明するメッセージなどが記録されます。後述しますが、これらの情報はGitクライアントのログ機能で確認できます。

リポジトリの作成

 Gitでバージョン管理を行うには、はじめにリポジトリを作成する必要があります。SourceTreeでは「ファイル」メニューの「新規/クローンを作成する」からリポジトリを作成できます。また、「ブックマーク」ウィンドウの左端のツールバーアイコンをクリックしても同様の操作を行えます。

 Gitではリポジトリを作成する方法として、新規に空のリポジトリを作成する方法と、既存のリポジトリを複製して作成する方法の2つが用意されています。新規に空のリポジトリを作成するには、まず「リポジトリを作成」をクリックし、「リポジトリのタイプ」として「Git」を選択します(図3)。

図3 「リポジトリを作成」画面ではリポジトリを作成するディレクトリを指定する。この例では「/Users/hylom/work」ディレクトリにリポジトリを作成している
図3 「リポジトリを作成」画面ではリポジトリを作成するディレクトリを指定する。この例では「/Users/hylom/work」ディレクトリにリポジトリを作成している

 続いてリポジトリを作成するディレクトリを「リポジトリ保存先」で指定し「作成」をクリックします。リポジトリを作成すると、同時にそのリポジトリがブックマークに登録され、すばやくアクセスできるようになります。

 なお、Windows版のSourceTreeでは「ブックマーク」画面がメインウィンドウの左側に表示されますが、機能自体に変わりはありません(図4)。

図4 Windows版SourceTreeでは「ブックマーク」画面がメインウィンドウの左側に表示される
図4 Windows版SourceTreeでは「ブックマーク」画面がメインウィンドウの左側に表示される

 また、「表示」メニューの「ブックマーク表示/非表示を切り替え」でブックマーク画面の表示/非表示を切り替えることが可能です。

既存のリポジトリを開く

 SourceTreeの起動直後は、前回開いていたリポジトリが自動的に表示されます。また、ブックマーク画面に表示されているリポジトリをダブルクリックするとそのリポジトリが表示されます。別のリポジトリを開きたい場合は、「ファイル」メニューの「開く」を選択し、そのディレクトリを指定します。また、複数のリポジトリを同時に開くことも可能です。OSX版のSourceTreeではリポジトリごとにウィンドウが開きますが、Windows版のSourceTreeでは開いているリポジトリをタブで管理できます。

作成されるリポジトリ関連ファイルとリポジトリの削除

 リポジトリを作成すると、そのディレクトリ内に「.git」というディレクトリが作成され、そこに変更履歴を管理するデータベースや設定ファイルなどが格納されます。これらのファイルやディレクトリを直接手作業で操作することはほとんどありませんが、不用意に操作してしまうとすべての履歴が消えてしまう可能性もあるので注意が必要です。

 誤ってリポジトリを作成した場合や、リポジトリが不要になった場合は、そのリポジトリに対応するディレクトリを削除することでリポジトリを削除できます。ただし、削除したリポジトリは復元できないので、慎重に削除してください。

リポジトリへのファイルの追加

リポジトリを作成したら、次にバージョン管理対象のディレクトリにファイルを作成/コピーし、リポジトリに登録していきます。リポジトリへのファイルの登録は、メインウィンドウの「追加」ボタンで行います。

リポジトリウィンドウとファイルステータス画面

 SourceTreeでは、「リポジトリ」ウィンドウでリポジトリの管理を行います(図5)。リポジトリウィンドウには、「ファイルステータス」と「ログ」、「検索」という3つの表示モードがあります。これらはウィンドウ左上のボタン(Windows版の場合はウィンドウ左下のタブ)で切り替えることができます。

 ファイルの追加やコミット操作を行うには、左側のボタン/タブを選択すると表示される「ファイルステータス」モードを使用します。ファイルステータスモードでは、作業ツリー内のファイルやディレクトリの管理が行えます。ここで「作業ツリーのファイル」欄には作業ツリー内にあるファイルが、「Indexにステージしたファイル」欄にはコミット対象のファイルが表示されます。これらの欄が表示されていない場合は、ツールバーの下にあるドロップダウンメニューをクリックし、「保留中のファイル」を選択しましょう。このとき、「作業ツリーのファイル」欄にはバージョン管理対象として登録されていないファイル、もしくは前回のコミットから変更が加えられているファイルが表示されます。

 ここで、リポジトリに追加したいファイルを選択してツールバーの「追加」ボタンをクリックするか、ファイル名横のチェックボックスをクリックしてチェックを入れると、指定されたファイルがコミット対象に追加され、「Indexにステージしたファイル」欄に移動します。また、バージョン管理対象にしたくないファイルを追加してしまった場合は、チェックボックスをクリックしてチェックを外すことで「作業ツリーのファイル」に戻すことができます。

 これらの欄で選択したファイルは、右側にその内容がプレビュー表示されます。前回のコミットから変更が加えられたファイルの場合、ここで変更点が色の付いたdiff(差分)形式で表示されるので変更箇所が分かりやすくなっています。

図5 SourceTreeの「リポジトリ」ウィンドウ。ここからリポジトリに追加するファイルやコミットするファイルの指定、コミットの実行といった操作を行える
図5 SourceTreeの「リポジトリ」ウィンドウ。ここからリポジトリに追加するファイルやコミットするファイルの指定、コミットの実行といった操作を行える
❶表示
表示モードを切り替える
❷ツールバー
リポジトリに対する各種操作を実行する
❸サイドバー
ブランチやタグ、登録されているリモートリポジトリなどの情報が表示される
❹表示されるファイルの切り替え
表示するファイルや並べ方を変更する
❺表示の切り替え
ファイルの表示方法を変更する
❻検索
表示するファイルをファイル名で検索できる
❼プレビューの表示形式切り替え
プレビューの表示形式を切り替える
❽Indexにステージしたファイル
コミット対象のファイルが表示される
❾作業ツリーのファイル
コミット対象ではないファイルが表示される
❿ファイルの内容
ファイルの内容がプレビュー表示される
⓫コミットメッセージ
ここに入力されたテキストがコミットメッセージとして使用される
⓬サイドバーの表示切り替え
サイドバーの表示/非表示を切り替える
⓭コマンド履歴の表示
切り替えコマンド履歴の表示/非表示を切り替える
⓮ステータスバー
リポジトリの状態を表示する

コミットの実行

新たに追加したファイルや編集したファイルをコミット対象に追加したら、コミットを実行して追加されたファイルや変更点をリポジトリに記録します。

SourceTreeでコミットを実行する

 SourceTreeでは、ツールバーの「コミット」をクリックするか、「コミットメッセージ」欄をクリックすると、コミットボタンが表示されます(図6)。ここで「コミットメッセージ」欄にメッセージを入力して「コミット」ボタンをクリックすることでコミットを実行できます。

 ここで入力するコミットメッセージは後からコミットを探す際の手がかりとなり、また複数人の開発者で開発を行っている場合は、開発者がそのコミットでどのような変更を加えたのかを知るための重要な情報となります。コミットで加えた変更点を分かりやすく、かつ簡潔に文章で表現するように心がけましょう。

図6 SourceTreeでコミットを行うには、ツールバーの「コミット」をクリックするか、コミットメッセージ欄をクリックしてからコミットメッセージを入力し、「コミット」ボタンをクリックする
図6 SourceTreeでコミットを行うには、ツールバーの「コミット」をクリックするか、コミットメッセージ欄をクリックしてからコミットメッセージを入力し、「コミット」ボタンをクリックする
❶コミットするユーザー情報
コミットするユーザーの名前とメールアドレスが表示される
❷オプションのコミット
コミットオプションを指定する
❸コミットメッセージ
ここにコミットメッセージを入力する
❹キャンセル
コミットをキャンセルする
❺コミット
コミットを実行する
❻コミットを直ちにプッシュする
作業中のブランチに対応するリモートリポジトリが登録されている場合、コミットと同時にプッシュを実行する

表示されるファイルを切り替える

 コミットを実行すると、コミットしたファイルは「Indexにステージしたファイル」欄と「作業ツリーのファイル」欄のどちらにも表示されなくなります。コミット済みのファイルについても確認したい場合は、「保留中のファイルを表示,パス名順」ドロップダウンメニューを使って表示対象のファイルを切り替えることができます(図7)。

図7 「保留中のファイルを表示,パス名順」ドロップダウンメニューで表示するファイルを指定できる。指定内容は表1を参照
図7 「保留中のファイルを表示,パス名順」ドロップダウンメニューで表示するファイルを指定できる。指定内容は表1を参照

 このドロップダウンメニューでは、表示対象を指定する「のみを表示」と、表示順(ファイルのソート方法)を切り替える「並び替え」の2つの欄が用意されています。デフォルトでは「保留中のファイル」が指定されていますが、「すべてのファイル」を指定することで、作業ツリー内にあるすべてのファイルが表示されます。

 それぞれの設定内容の意味は表1の通りです。

表1 指定できる表示対象
設定名説明
保留中のファイル変更が加えられているファイルを表示する
競合競合が発生しているファイルを表示する
未追跡バージョン管理対象になっていないファイルを表示する
無視.gitignoreファイルなどで無視するように指定されているファイルを表示する
クリーンバージョン管理対象になっているファイルのうち、前回のコミットから変更されていないものを表示する
変更バージョン管理対象になっているファイルのうち、前回のコミットから変更されているものを表示する
すべてのファイルすべてのファイルを表示する

コミットログの確認

 リポジトリに対して実行したコミットはすべて記録されます。記録されたコミット一覧は「コミットログ」と呼ばれ、SourceTreeでは表示モードを「ログ」にすることでコミットログを確認できます(図8)。

図8 表示モードを「ログ」にしたリポジトリウィンドウ。ここからコミットログを確認できる
図8 表示モードを「ログ」にしたリポジトリウィンドウ。ここからコミットログを確認できる
❶表示するブランチ
表示対象とするブランチを指定する
❷リモートブランチの表示/非表示
リモートブランチを表示対象にするかどうかを指定する
❸親子関係で並べ替え
コミットの表示方法を指定する
❹ジャンプ先
特定のタグやブランチを指定して表示する
❺グラフ
コミットの親子関係が表示される
❻コミット一覧
コミットメッセージやコミットID、作者、日時などの情報が表示される

❼変更されたファイル一覧
変更されたファイルが表示される
❽変更点
指定したファイルに対する変更点が表示される
❾コミット
コミットに対する詳細情報が表示される

 コミットログでは、各コミットのコミットメッセージやコミットID、コミットを実行したユーザー名とメールアドレス、コミットを実行した日時といった情報が表示されます。また、コミットメッセージの前には後述するブランチやタグの情報がアイコンとともに表示されます。デフォルトの設定ではすべてのブランチのコミットログが表示されますが、特定のブランチに対するコミットのみを表示することも可能です(図8の1)。

 ここでコミット一覧からコミットを選択すると、そのコミットで行われた変更点が画面下側に表示されます。ここでは変更されたファイル一覧が左側に表示され、ファイルを選択すると画面右側に変更点がdiff形式で表示されます。

ブランチの分岐を確認するコミットグラフ

 リポジトリウィンドウの「グラフ」欄には、「コミットグラフ」と呼ばれる情報が表示されます。コミットグラフはブランチの分岐やマージをグラフィカルに表示するもので、どのブランチがどのブランチを元にしているのか、どのブランチがどのブランチにマージされたのか、といった情報を一目で把握できます(図9)。

図9 SourceTreeのコミットグラフ。下から上にいくほど新しい更新情報となる
図9 SourceTreeのコミットグラフ。下から上にいくほど新しい更新情報となる

作業ツリー内ファイルの削除と復元

 Gitでバージョン管理しているファイルは、いつでも削除やリネームが可能です。削除やリネームを行ったファイルについても、リポジトリ内にはそれ以前の状態がすべて記録されているため、いつでも以前の状態に復元できます。

ファイルを削除する

 バージョン管理しているファイルを削除するには、まずファイルステータスモードに切り替えて、「作業ツリーのファイル」に対象のファイルを表示させます。ファイルを選択して右クリックするとメニューが表示され、ここからファイルの削除や追跡の停止、移動といった作業を行えます(図10)。

図10 対象ファイルを選択した状態で右クリックメニューを表示すれば、ファイルに対する各種操作が行える
図10 対象ファイルを選択した状態で右クリックメニューを表示すれば、ファイルに対する各種操作が行える

 ここで「削除」を選択すると、指定したファイルを削除できます。「削除」ではなく「追跡を停止する」を選択すると、ファイルを削除せずにバージョン管理対象から外すことができます。また、ファイルの移動やリネームを行うには同じメニュー内にある「移動」を選択します。移動先を指定する画面が表示されますが、ここでディレクトリを変更せず、「移動先」に別の名前を入力することで、ファイルのリネームを実行できます(図11)。

図11 「移動」ではファイルの移動のほか、リネームも実行できる
図11 「移動」ではファイルの移動のほか、リネームも実行できる

特定のファイルを過去のバージョンに復元する

 特定のファイルを任意の時点の状態に復元するには、まずファイルステータスモードで「作業ツリーのファイル」に対象のファイルを表示させます。次に対象のファイルを選択し、右クリックして「コミットまで戻す」を選択します。するとコミットを選択する画面が表示されるので、ここで対象とするコミットを指定し、「OK」をクリックします(図12)。最後に確認画面が表示されるので、「OK」をクリックすればファイルの内容が復元されます。

図12 対象のコミットを選択して「OK」をクリックする
図12 対象のコミットを選択して「OK」をクリックする

 また、削除したファイルの復元は、ログモードで行います。ログモードで対象とするコミットを探し、画面下側のファイル一覧画面でファイルを選んで、右クリックメニューから「コミットまで戻す」を選択します(図13)。

図13 ログモードで復元したいコミットとファイルを選択し、「コミットまで戻す」を実行する
図13 ログモードで復元したいコミットとファイルを選択し、「コミットまで戻す」を実行する

 確認ダイアログが表示されるので、ここで「OK」をクリックすると、そのコミット時点のファイルが復元されます。