Howto

gitを使ってソースコードの変更を管理する

gitは分散型のバージョン管理システム(VCS: Version Control System)です。バージョン管理システムを使うと、ソースコードの修正履歴を記録したり、差分を確認したりといったソフトウェア開発で繰り返し行う作業を簡単に行えるようになります。

もしかしたら、以前にCVSやSubversionなどのVCSを使ったことがあるかもしれません。これらのVCSは 中央集権型の構成をしており、すべての履歴は中央のサーバーにあり1、作業をする際はそれを手元のクライアントに"チェックアウト"する必要がありました。gitは分散型のVCSであり、中央のサーバー が無くても動作します。

gitは、Linuxカーネル等のオープンソースソフトウェア開発で使われています。またアットマークテクノでもgitを使ってソースコードの管理をしています。

本Howtoでは、gitを使ってソースコードの変更を管理する例として、ATDE上でAtmark Distの変更点を確認する方法を紹介します。

Atmark Distの基本的な使い方についてはArmadillo実践開発ガイドや、各製品のマニュアルをご参照ください。gitの基本的な使い方については、本HowtoのAppendix B. 参考情報をご参照ください。

1. gitの設定

まず最初に、以下のコマンドを実行してユーザーの名前とメールアドレスを登録してください。(登録する名前、ユーザーアドレスは適宜変更してください)

[ATDE ~]$ git config --global user.name "Jiro Arma"
[ATDE ~]$ git config --global user.email jiro@atmark-techno.com

2. Atmark Distのダウンロードと展開

以下のコマンドを実行し、Atmark Distのダウンロードと展開を行なってください。

[ATDE ~]$ wget http://download.atmark-techno.com/dist/atmark-dist-20130704.tar.gz
[ATDE ~]$ tar zxf atmark-dist-20130704.tar.gz

3. リポジトリの作成

リポジトリとは、ファイルやディレクトリの状態を記録しておく場所のことを示します。

以下のコマンドを実行して、リポジトリを作成してください。

[ATDE ~]$ cd atmark-dist-20130704
[ATDE ~/atmark-dist-20130704]$ git init

4. Atmark Distをリポジトリにコミットする

コミットするとは、リポジトリに対して変更を確定することを示します。 コミットすることで、ファイルやディレクトリの追加・変更をリポジトリに記録することができます。

以下のコマンドを実行して、カレントディレクトリ以下にあるファイルをコミット対象に登録してください。

[ATDE ~/atmark-dist-20130704]$ git add .

以下のコマンドを実行して、コミット対象に登録したファイルを、コミットしてください。

[ATDE ~/atmark-dist-20130704]$ git commit -m "initial commit: based on atmark-dist-20130704"

5. 新しいプロダクトを作成する

ソースコードを変更する前に、作業用のプロダクトを作成します。ここでは例としてArmadillo-810の作業用プロダクトを作成します。他のプロダクトをお使いの場合は、適宜読み替えてください。

以下のコマンドを実行して、新しいプロダクトを作成してください。

[ATDE ~/atmark-dist-20130704]$ cp -a vendors/AtmarkTechno/Armadillo-810 vendors/AtmarkTechno/my-product
[ATDE ~/atmark-dist-20130704]$ git add vendors/AtmarkTechno/my-product
[ATDE ~/atmark-dist-20130704]$ git commit -m "create original product"

6. Atmark Distの修正

ソースコードの例として、以下のコマンドを実行し、my-productのホスト名を変更してください。

[ATDE ~/atmark-dist-20130704]$ cat vendors/AtmarkTechno/my-product/etc/default/HOSTNAME 
armadillo810-0
[ATDE ~/atmark-dist-20130704]$ echo "armadillo810-gittest" > vendors/AtmarkTechno/my-product/etc/default/HOSTNAME
[ATDE ~/atmark-dist-20130704]$ cat vendors/AtmarkTechno/my-product/etc/default/HOSTNAME
armadillo810-gittest

7. 変更点をコミットする

まずは以下のコマンドを実行し、変更されたファイルを確認してください。

[ATDE ~/atmark-dist-20130704]$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#    modified:   vendors/AtmarkTechno/my-product/etc/default/HOSTNAME
#
no changes added to commit (use "git add" and/or "git commit -a")

上記コマンド結果の「modified」となっている行に変更されたファイル名が表示されます。

以下のコマンドを実行し、前述の手順で変更されたHOSTNAMEファイルをコミットしてください。

[ATDE ~/atmark-dist-20130704]$ git add vendors/AtmarkTechno/my-product/etc/default/HOSTNAME
[ATDE ~/atmark-dist-20130704]$ git commit -m "change my-product hostname" 

一部のファイルやディレクトリがコミットに含まれない場合は、.gitignore(設定ファイル)で無視されるように設定されている可能性があります。この設定ファイルは、リポジトリに追加する必要のないファイルやディレクトリ(.dや.oでファイル名が終わる中間ファイル等)をgitが無視するように設定するためのファイルです。

.gitignoreで設定されているファイルやディレクトリをリポジトリに追加したい場合は、-fオプションを付けてgit addコマンドを実行してください。

8. 変更点の確認

gitでは、ソースコードの変更を確認する方法がいくつかあります。ここでは変更一覧を確認する方法と、指定した変更内容の詳細を確認する方法を紹介します。

8.1. 変更一覧の確認

以下のコマンドを実行することで、今までに行った変更の一覧を確認できます。

[ATDE ~/atmark-dist-20130704]$ git log
commit b743aba04e8c9a464464df6ed540d5f6123f32f7
Author: Jiro Arma <jiro@atmark-techno.com>
Date:   Mon Sep 30 13:40:41 2013 +0900

    change my-product hostname

commit f5eadf8fb196c9536eba3a5f9c382e473daec005
Author: Jiro Arma <jiro@atmark-techno.com>
Date:   Mon Sep 30 13:38:48 2013 +0900

    create original product

commit 8e6484a7ee443b427588b86ace70e1ef24f1ccb8
Author: Jiro Arma <jiro@atmark-techno.com>
Date:   Mon Sep 30 13:37:48 2013 +0900

    initial commit: based on atmark-dist-20130704

8.2. 指定したの変更内容の確認

以下のコマンドを実行することで、my-productディレクトリ以下の変更内容を確認できます。

[ATDE ~/atmark-dist-20130704]$ git diff HEAD^ HEAD
diff --git a/vendors/AtmarkTechno/my-product/etc/default/HOSTNAME b/vendors/AtmarkTechno/my-product/
index 37c7a20..e9a2acd 100644
--- a/vendors/AtmarkTechno/my-product/etc/default/HOSTNAME
+++ b/vendors/AtmarkTechno/my-product/etc/default/HOSTNAME
@@ -1 +1 @@
-armadillo810-0
+armadillo810-gittest

Appendix A. gitを使用したパッチの作成方法

以下のようにファイルにリダイレクトすることで、パッチを作成することも可能です。

[ATDE ~/atmark-dist-20130704]$ git diff HEAD^ HEAD > atmark-dist-armadillo810-chg-hostname.patch
[ATDE ~/atmark-dist-20130704]$ cat atmark-dist-armadillo810-chg-hostname.patch
diff --git a/vendors/AtmarkTechno/my-product/etc/default/HOSTNAME b/vendors/AtmarkTechno/my-product/
index 37c7a20..e9a2acd 100644
--- a/vendors/AtmarkTechno/my-product/etc/default/HOSTNAME
+++ b/vendors/AtmarkTechno/my-product/etc/default/HOSTNAME
@@ -1 +1 @@
-armadillo810-0
+armadillo810-gittest

また「git format-patch」コマンドを使用してパッチを作成することもできます。

Appendix B. 参考情報

本Howtoでは、gitを使ってソースコードの変更を管理する方法についてのみ紹介しました。gitには他にも多くの機能があり、実際にソフトウェア開発で便利に使うことができます。

gitの詳細な使い方については、以下のWebページや書籍が参考になります。

Appendix B.1. Webページ

Appendix B.2. 書籍

  • 入門Git(ISBN-13: 978-4798023809)

  • 入門git(ISBN-13: 978-4274067679)

  • Gitによるバージョン管理(ISBN-13: 978-4274068645)


  1. VCSでは、全ての履歴を集めたものをリポジトリと呼びます。 ↩︎