はじめに
はじめの一歩!ソースコード管理に必要なバージョン管理とは では、さまざまなバージョン管理ソフトウェアを紹介しました。今回は、分散型のバージョン管理ソフトウェア 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
gitアカウントの作成
リポジトリへの操作を行う専用アカウントを作成します。ここでは、UID/GIDともにgitとして作成しています。
$ sudo groupadd git
$ sudo useradd -g git -d /home/git -s /bin/bash git
任意のパスワードを設定します。
$ sudo passwd git
SSH公開鍵の作成
現在BOXにログインしているvagrantユーザーのSSH公開鍵を作成します。
SSH秘密鍵のパスフレーズ入力を求められますので、任意のパスフレーズを入力して下さい。
$ ssh-keygen -t rsa
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
/etc/hosts への登録
Gitサーバーの名前解決のため、hostsに登録します。
$ echo '192.168.0.10 gitserver.vagrantup.com gitserver' | sudo tee -a /etc/hosts
SSH接続確認
gitアカウントでSSH接続可能か確認します。
$ ssh git@gitserver
以降の作業は、gitアカウントで行います。
Git初期設定
Gitの初期設定として、Gitリポジトリ管理者のユーザー名とメールアドレスを設定します。
なお、本設定はユーザーごとに行い、適時変更できます。
$ git config --global user.name git
$ git config --global user.email git@vagrantup.com
現在のGit設定情報を確認します。
$ git config -l
gitリポジトリの初期化
Gitリポジトリとなるフォルダを作成し、ベアリポジトリとして初期化します。
何も登録されていない、空のリポジトリとして初期化されます。
$ mkdir -p ~/myrepos.git && cd ~/myrepos.git
$ git init --bare
リモートリポジトリの設定
作成されたベアリポジトリのリモートリポジトリ名を登録します。
ここでは、リモートリポジトリとして、originを指定していますが、任意の名前で構いません。
$ git remote add origin git@gitserver:/home/git/myrepos.git
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
Gitリポジトリのクローン(clone)
Gitリポジトリをクローン(複製)して、ローカルリポジトリとします。
cloneは、集中型の CVS や Subversion には無いGit独特の機能ですが、感覚としてはchekoutに近い働きをします。
$ mkdir -p /tmp/work && cd /tmp/work
$ git clone git@gitserver:myrepos.git
空のリポジトリをクローンしたという旨の警告が表示されます。
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
現在のGit設定情報を確認します。
指定した内容が、反映されていることが確認できます。
また、クローンしたGitリポジトリの情報も確認できます。
$ cd myrepos
$ git config -l
追加(add)
クローンしたローカルリポジトリにファイルを追加します。
ここでは、test1.txtを作成し、ローカルリポジトリに追加指定しています。
CVSやSubversionと同様に、addコマンドは追加指定のみですので、必ずcommitする必要があります。
$ echo test1 > test1.txt
$ git add .
承認(commit)
更新されたファイルまたは、追加指定されたファイルをリポジトリに登録します。
$ git commit -m '1st commit'
ログ(log)
リポジトリに登録されたファイルのコミットログを表示します。
カラー指定を行っているため、コミットログがカラー表示されています。
$ git log
コミットされたファイル名とログを参照することもできます。
コミットされたファイル名が追加表示されています。
create modeは、新規にコミットされたファイルの場合に表示されます。
$ git log --summary
差分(diff)
ローカルリポジトリに登録されたファイルとの差分を表示します。
ここでは、先に作成したファイルを更新しています。
緑色で表示された最下行に、行追加の差分が確認できます。
$ echo test1 >> test1.txt
$ git diff
さらに、コミット後に差分をdiff形式で確認することもできます。
$ git add .
$ git commit -m '2nd commit'
$ git log -p
状態(status)
ローカルリポジトリ上で修正または、作成されたファイルを表示します。
ここでは、先に作成したファイルを更新し、新たにファイルを作成しています。
test1.txtが更新、test2.txtが追加されていないことが確認できます。
$ echo test1 >> test1.txt
$ echo test2 > test2.txt
$ git status
新規ファイルをコミットします。
このように、commit時に-m オプションを指定しない場合、環境変数EDITORで指定されたエディタが起動しますので、コミットログを入力します。
$ git add .
$ git commit
一括承認(commit)
複数ファイルをコミットする場合、commitコマンドに-aオプションを指定することで、複数ファイルを一度にコミットすることができます。
更新したファイルの一括コミット
$ echo test1 >> test1.txt
$ echo test2 >> test2.txt
$ git commit -a
追加したファイルの一括コミット
新規ファイルの場合、addすることでcommitできますので忘れないようにして下さい。
$ echo test3 > test3.txt
$ echo test4 > test4.txt
$ git add .
$ git commit -a
Gitリポジトリへの送信(push)
ローカルリポジトリで登録した内容を、Gitリポジトリに送信します。
ここまでの操作は、全てローカルリポジトリ内に対する操作ですので、最後にマスターリポジトリであるGitサーバーに送信します。
送信の際には、登録したリモート名とマスターリポジトリを示すmasterを指定します。
$ git push origin master
リモートからのバージョン管理
Windows上のCygwin端末から、リポジトリを操作します。
なお、GitはCygwinのデフォルトインストールではインストールされませんので、Cygwin + rbenv環境でプロビジョニングサーバーを構築する方法(第1回)~Cygwinを用いて、rbenv環境を構築する を参考にして、Gitをインストールして下さい。
/etc/hosts の設定
Gitサーバーの構築の手順5を参考に、Windowsのhostsファイルを編集して名前解決できるようにします。
デフォルトでは、%WINDIR%system32driversetcにhostsファイルが保存されています。
UACで管理者権限に昇格したCygwin Terminalを実行して、編集することもできます。
ssh-agentの起動とSSH公開鍵のリモートコピー
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
$ scp ~/.ssh/id_rsa.pub vagrant@gitserver:/tmp
SSH公開鍵の追加
GitサーバーにリモートコピーされたSSH公開鍵をgitユーザーの認証鍵に追加します。
$ cat /tmp/id_rsa.pub | sudo tee -a ~git/.ssh/authorized_keys
SSH接続確認
Cygwin上から、gitserverに接続可能か確認します。
接続に成功すれば、Gitリポジトリを操作できるようになります。
$ ssh git@gitserver
Git初期設定
Gitによるバージョン管理の手順3と同様に、Gitの初期設定を行います。
ユーザー名とメールアドレスは適時変更して下さい。
Gitリポジトリのクローン(clone)
Gitリポジトリをクローン(複製)して、ローカルリポジトリとします。
$ mkdir -p /tmp/work && cd /tmp/work
$ git clone git@gitserver:myrepos.git
ローカルリポジトリが作成されましたので、gitの設定情報を確認します。
$ cd myrepos
$ git config -l
Gitリポジトリの取得(pull)
Gitリポジトリをローカルリポジトリに取り込みます。
Gitは、ローカルリポジトリをオフラインであっても操作できますが、Gitリポジトリは、複数のクライアントによって更新されて行きますので、適度なタイミングでGitリポジトリをローカルリポジトリに取り込み同期させます。
$ git pull
Cygwin上でもリポジトリ管理可能な環境が構築できましたので、「Gitによるバージョン管理」の項を参考にローカルリポジトリを操作してみて下さい。
ファイルのコミットは、ローカルリポジトリ内だけに留まりますので、最後にpushコマンドを実行して、Gitリポジトリとローカルリポジトリの同期を取ることは極めて重要です。
まとめ
ここまで、Gitの使い方を簡単に解説しました。Gitは、マスターリポジトリをローカルリポジトリとして複製し、オフライン状況下であっても利用できるバージョン管理ソフトウェアです。従来の集中型には無いpushやpullといった機能を用いて、ローカルリポジトリを更新できる点で、非常に使いやすいバージョン管理ソフトウェアだと言えます。今回紹介した記事を参考に、Gitによるバージョン管理を行ってみましょう。
次回は、mercurial環境の構築と、基本操作の説明をします。
参考記事
リモートリポジトリを使うなら、tracpath(トラックパス)が便利です!下記記事をぜひご参照下さい。
■tracpath(トラックパス)を使って、安全に複数名でバージョン管理を行う
社内サーバにリモートリポジトリを作るのも一つですが、「開発にまつわる面倒事」をこの際全部、tracpath(トラックパス)に任せてみませんか?
バージョン管理サービス・プロジェクト管理サービスの「tracpath(トラックパス)」では、
ユーザー5名、リポジトリ数3つまで、無料で利用可能です。
さっそく実務でも使って見ましょう。
自らも開発を行う会社が作ったからこそ、開発チームの「作る情熱」を支える、やるべきことに集中出来るサービスになっています。
エンタープライズ利用が前提のASPサービスなので、セキュリティも強固です。