Git:バージョン管理システムのチュートリアル

はじめに

はじめの一歩!ソースコード管理に必要なバージョン管理とは では、さまざまなバージョン管理ソフトウェアを紹介しました。今回は、分散型のバージョン管理ソフトウェア Git(ギット) を解説します。

なお、構築に使用したマシン環境は、下記のとおりです。

項目 内容
OS Windows 7 Ultimate 32bit
IPアドレス 192.168.0.253
Cygwin Setup Version 2.831
VirtualBox 4.3.4 r91027
Vagrant 1.3.5

上記のソフトウェアと環境を使って解説を進めていきますが異なる環境でも同様の操作は可能です。また以下の記事を参考にして仮想環境の構築を解説していますので参考にしてください。

Gitとは

Linuxの開発者Linus Torvalds(リーナス・トーバルズ)がLinuxソースコードの管理に使用するために設計開発したバージョン管理ソフトウェアとして、2005年10月にリリースされました。マスターリポジトリをクライアントが完全に複製し、ローカルリポジトリとして使用することで、ネットワーク接続が必須となる集中型とは異なり、オフラインであってもリポジトリの操作が行えることから、分散型バージョン管理ソフトウェアと言われています。

Gitサーバーの構築

リポジトリを管理するGitサーバーを構築します。

BOX起動

BOXを起動し、接続します。

$ cd /tmp/unix
$ vagrant up
$ vagrant ssh

gitのインストール

パッケージ管理コマンドを使用してインストールします。

$ sudo yum -y install git

/bootcamp/wp-content/themes/_btcp/images/git_beginner01.png

gitアカウントの作成

リポジトリへの操作を行う専用アカウントを作成します。ここでは、UID/GIDともにgitとして作成しています。

$ sudo groupadd git
$ sudo useradd -g git -d /home/git -s /bin/bash git

/bootcamp/wp-content/themes/_btcp/images/git_beginner02.png

任意のパスワードを設定します。

$ sudo passwd git

/bootcamp/wp-content/themes/_btcp/images/git_beginner03.png

SSH公開鍵の作成

現在BOXにログインしているvagrantユーザーのSSH公開鍵を作成します。

SSH秘密鍵のパスフレーズ入力を求められますので、任意のパスフレーズを入力して下さい。

$ ssh-keygen -t rsa

/bootcamp/wp-content/themes/_btcp/images/git_beginner04.png

SSH公開鍵の設定

作成したSSH公開鍵を、gitユーザーのSSH認証鍵(authorized_keys)に設定します。

$ sudo mkdir ~git/.ssh
$ cat ~/.ssh/id_rsa.pub | sudo tee ~git/.ssh/authorized_keys
$ sudo chmod 0700 ~git ~git/.ssh
$ sudo chmod 0600 ~git/.ssh/authorized_keys
$ sudo chown -R git:git ~git/.ssh

/bootcamp/wp-content/themes/_btcp/images/git_beginner05.png

/etc/hosts への登録

Gitサーバーの名前解決のため、hostsに登録します。

$ echo '192.168.0.10 gitserver.vagrantup.com gitserver' | sudo tee -a /etc/hosts

/bootcamp/wp-content/themes/_btcp/images/git_beginner06.png

SSH接続確認

gitアカウントでSSH接続可能か確認します。

$ ssh git@gitserver

/bootcamp/wp-content/themes/_btcp/images/git_beginner07.png

以降の作業は、gitアカウントで行います。

Git初期設定

Gitの初期設定として、Gitリポジトリ管理者のユーザー名とメールアドレスを設定します。

なお、本設定はユーザーごとに行い、適時変更できます。

$ git config --global user.name git
$ git config --global user.email git@vagrantup.com

/bootcamp/wp-content/themes/_btcp/images/git_beginner08.png

現在のGit設定情報を確認します。

$ git config -l

/bootcamp/wp-content/themes/_btcp/images/git_beginner09.png

gitリポジトリの初期化

Gitリポジトリとなるフォルダを作成し、ベアリポジトリとして初期化します。

何も登録されていない、空のリポジトリとして初期化されます。

$ mkdir -p ~/myrepos.git && cd ~/myrepos.git
$ git init --bare

/bootcamp/wp-content/themes/_btcp/images/git_beginner10.png

リモートリポジトリの設定

作成されたベアリポジトリのリモートリポジトリ名を登録します。

ここでは、リモートリポジトリとして、originを指定していますが、任意の名前で構いません。

$ git remote add origin git@gitserver:/home/git/myrepos.git

/bootcamp/wp-content/themes/_btcp/images/git_beginner11.png

Gitサーバー上に登録されているリモートリポジトリ名を表示します。

$ git remote -v

以上で、Gitサーバーの構築が終了します。

Gitによるバージョン管理

Gitリポジトリが構築できましたので、バージョン管理を行います。

この作業は、vagrantアカウントで行いますので、gitアカウントをログアウトして下さい。

ssh-agentの設定

ssh-agentを利用して、GitリポジトリへのSSH接続に使用するSSH秘密鍵のパスフレーズ入力をバイパスします。

ssh-addコマンドを実行すると、SSH秘密鍵のパスフレーズを要求されますので入力します。

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa

/bootcamp/wp-content/themes/_btcp/images/git_beginner12.png

Gitリポジトリのクローン(clone)

Gitリポジトリをクローン(複製)して、ローカルリポジトリとします。

cloneは、集中型の CVSSubversion には無いGit独特の機能ですが、感覚としてはchekoutに近い働きをします。

$ mkdir -p /tmp/work && cd /tmp/work
$ git clone git@gitserver:myrepos.git

空のリポジトリをクローンしたという旨の警告が表示されます。

/bootcamp/wp-content/themes/_btcp/images/git_beginner13.png

Git初期設定

Gitの初期設定として、Gitリポジトリ管理者のユーザー名とメールアドレスを設定します。

なお、本設定はユーザーごとに行い、適時変更できます。

color指定は、Gitがコンソールに表示する差分(diff)、状態(status)、ブランチ(branch)の情報をカラー表示するためのものです。

設定しなくても構いませんが、指定するとコンソールに表示される情報が、格段に見やすくなります。

$ git config --global user.name vagrant
$ git config --global user.email vagrant@vagrantup.com
$ git config --global color.diff auto
$ git config --global color.status auto
$ git config --global color.branch auto

/bootcamp/wp-content/themes/_btcp/images/git_beginner14.png

現在のGit設定情報を確認します。

指定した内容が、反映されていることが確認できます。

また、クローンしたGitリポジトリの情報も確認できます。

$ cd myrepos
$ git config -l

/bootcamp/wp-content/themes/_btcp/images/git_beginner15.png
/bootcamp/wp-content/themes/_btcp/images/git_beginner16.png

追加(add)

クローンしたローカルリポジトリにファイルを追加します。

ここでは、test1.txtを作成し、ローカルリポジトリに追加指定しています。

CVSやSubversionと同様に、addコマンドは追加指定のみですので、必ずcommitする必要があります。

$ echo test1 > test1.txt
$ git add .

/bootcamp/wp-content/themes/_btcp/images/git_beginner17.png

承認(commit)

更新されたファイルまたは、追加指定されたファイルをリポジトリに登録します。

$ git commit -m '1st commit'

/bootcamp/wp-content/themes/_btcp/images/git_beginner18.png

ログ(log)

リポジトリに登録されたファイルのコミットログを表示します。

カラー指定を行っているため、コミットログがカラー表示されています。

$ git log

/bootcamp/wp-content/themes/_btcp/images/git_beginner19.png

コミットされたファイル名とログを参照することもできます。

コミットされたファイル名が追加表示されています。

create modeは、新規にコミットされたファイルの場合に表示されます。

$ git log --summary

/bootcamp/wp-content/themes/_btcp/images/git_beginner20.png

差分(diff)

ローカルリポジトリに登録されたファイルとの差分を表示します。

ここでは、先に作成したファイルを更新しています。

緑色で表示された最下行に、行追加の差分が確認できます。

$ echo test1 >> test1.txt
$ git diff

/bootcamp/wp-content/themes/_btcp/images/git_beginner21.png

さらに、コミット後に差分をdiff形式で確認することもできます。

$ git add .
$ git commit -m '2nd commit'
$ git log -p

/bootcamp/wp-content/themes/_btcp/images/git_beginner22.png

状態(status)

ローカルリポジトリ上で修正または、作成されたファイルを表示します。

ここでは、先に作成したファイルを更新し、新たにファイルを作成しています。

test1.txtが更新、test2.txtが追加されていないことが確認できます。

$ echo test1 >> test1.txt
$ echo test2  > test2.txt
$ git status

/bootcamp/wp-content/themes/_btcp/images/git_beginner23.png

新規ファイルをコミットします。

このように、commit時に-m オプションを指定しない場合、環境変数EDITORで指定されたエディタが起動しますので、コミットログを入力します。

$ git add .
$ git commit

/bootcamp/wp-content/themes/_btcp/images/git_beginner24.png
/bootcamp/wp-content/themes/_btcp/images/git_beginner25.png

一括承認(commit)

複数ファイルをコミットする場合、commitコマンドに-aオプションを指定することで、複数ファイルを一度にコミットすることができます。

更新したファイルの一括コミット

$ echo test1 >> test1.txt
$ echo test2 >> test2.txt
$ git commit -a

/bootcamp/wp-content/themes/_btcp/images/git_beginner26.png
/bootcamp/wp-content/themes/_btcp/images/git_beginner27.png

追加したファイルの一括コミット

新規ファイルの場合、addすることでcommitできますので忘れないようにして下さい。

$ echo test3 > test3.txt
$ echo test4 > test4.txt
$ git add .
$ git commit -a

/bootcamp/wp-content/themes/_btcp/images/git_beginner28.png
/bootcamp/wp-content/themes/_btcp/images/git_beginner29.png

Gitリポジトリへの送信(push)

ローカルリポジトリで登録した内容を、Gitリポジトリに送信します。

ここまでの操作は、全てローカルリポジトリ内に対する操作ですので、最後にマスターリポジトリであるGitサーバーに送信します。

送信の際には、登録したリモート名とマスターリポジトリを示すmasterを指定します。

$ git push origin master

/bootcamp/wp-content/themes/_btcp/images/git_beginner30.png

リモートからのバージョン管理

Windows上のCygwin端末から、リポジトリを操作します。

なお、GitはCygwinのデフォルトインストールではインストールされませんので、Cygwin + rbenv環境でプロビジョニングサーバーを構築する方法(第1回)~Cygwinを用いて、rbenv環境を構築する を参考にして、Gitをインストールして下さい。

/etc/hosts の設定

Gitサーバーの構築の手順5を参考に、Windowsのhostsファイルを編集して名前解決できるようにします。

デフォルトでは、%WINDIR%system32driversetcにhostsファイルが保存されています。

UACで管理者権限に昇格したCygwin Terminalを実行して、編集することもできます。

/bootcamp/wp-content/themes/_btcp/images/git_beginner31.png

ssh-agentの起動とSSH公開鍵のリモートコピー

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
$ scp ~/.ssh/id_rsa.pub vagrant@gitserver:/tmp

/bootcamp/wp-content/themes/_btcp/images/git_beginner32.png

SSH公開鍵の追加

GitサーバーにリモートコピーされたSSH公開鍵をgitユーザーの認証鍵に追加します。

$ cat /tmp/id_rsa.pub | sudo tee -a ~git/.ssh/authorized_keys

/bootcamp/wp-content/themes/_btcp/images/git_beginner33.png

SSH接続確認

Cygwin上から、gitserverに接続可能か確認します。

接続に成功すれば、Gitリポジトリを操作できるようになります。

$ ssh git@gitserver

/bootcamp/wp-content/themes/_btcp/images/git_beginner34.png

Git初期設定

Gitによるバージョン管理の手順3と同様に、Gitの初期設定を行います。

ユーザー名とメールアドレスは適時変更して下さい。

/bootcamp/wp-content/themes/_btcp/images/git_beginner35.png

Gitリポジトリのクローン(clone)

Gitリポジトリをクローン(複製)して、ローカルリポジトリとします。

$ mkdir -p /tmp/work && cd /tmp/work
$ git clone git@gitserver:myrepos.git

/bootcamp/wp-content/themes/_btcp/images/git_beginner36.png

ローカルリポジトリが作成されましたので、gitの設定情報を確認します。

$ cd myrepos
$ git config -l

/bootcamp/wp-content/themes/_btcp/images/git_beginner37.png

Gitリポジトリの取得(pull)

Gitリポジトリをローカルリポジトリに取り込みます。

Gitは、ローカルリポジトリをオフラインであっても操作できますが、Gitリポジトリは、複数のクライアントによって更新されて行きますので、適度なタイミングでGitリポジトリをローカルリポジトリに取り込み同期させます。

$ git pull

/bootcamp/wp-content/themes/_btcp/images/git_beginner38.png

Cygwin上でもリポジトリ管理可能な環境が構築できましたので、「Gitによるバージョン管理」の項を参考にローカルリポジトリを操作してみて下さい。

ファイルのコミットは、ローカルリポジトリ内だけに留まりますので、最後にpushコマンドを実行して、Gitリポジトリとローカルリポジトリの同期を取ることは極めて重要です。

まとめ

ここまで、Gitの使い方を簡単に解説しました。Gitは、マスターリポジトリをローカルリポジトリとして複製し、オフライン状況下であっても利用できるバージョン管理ソフトウェアです。従来の集中型には無いpushやpullといった機能を用いて、ローカルリポジトリを更新できる点で、非常に使いやすいバージョン管理ソフトウェアだと言えます。今回紹介した記事を参考に、Gitによるバージョン管理を行ってみましょう。

次回は、mercurial環境の構築と、基本操作の説明をします。

参考記事

リモートリポジトリを使うなら、tracpath(トラックパス)が便利です!下記記事をぜひご参照下さい。
 
■tracpath(トラックパス)を使って、安全に複数名でバージョン管理を行う


社内サーバにリモートリポジトリを作るのも一つですが、「開発にまつわる面倒事」をこの際全部、tracpath(トラックパス)に任せてみませんか?
バージョン管理サービス・プロジェクト管理サービスの「tracpath(トラックパス)」では、
ユーザー5名、リポジトリ数3つまで、永久無料で利用可能です。

さっそく実務でも使って見ましょう。
自らも開発を行う会社が作ったからこそ、開発チームの「作る情熱」を支える、やるべきことに集中出来るサービスになっています。
エンタープライズ利用が前提のASPサービスなので、セキュリティも強固です。