バージョン管理システムを導入する(git+Bitbucket)

はじめに

 gitはプログラムなどのソースファイルの変更履歴を、リポジトリ(貯蔵庫)という単位で管理するシステムです。複数の開発者が一つのリポジトリを共有するのではなく、一人一人が分散的にリポジトリ保有することで変更点の競合を減らし、円滑なアプリケーション開発を支援してくれます
 以下のドキュメントにわかりやすい説明が記載されているので、まずは是非ご一読ください

 また、利用のチュートリアルに関しては以下のリンクをお勧めします 

 もう一方のBitbucketは何かというと、gitの利用を前提としたwebサービスです。開発者が個別の端末に保有するリポジトリをローカルリポジトリというのですが、それをweb上に置いておいて、いつでもどこでもリポジトリを取得,変更したり、開発チームの人が閲覧できたりしたら便利ですよね?それを実現するのがBitbucketです。最も利用されている同種のサービスがGithubで、こちらはとても有名ですね。

 Githubの場合リポジトリを非公開に設定するのは有料となりますが、Bitbucketは非公開でも無料で利用できます。公開することで不利益を被る可能性がある場合や個人でリポジトリ管理をする場合などは、Bitbucketを利用してみてもいいかもしれません(実際の利用はコスト面だけでなく使用感や環境に合致しているか等、ご考慮ください)


 リンクのドキュメントは読んで頂けましたか?
 では、導入の方へ移っていきましょう

ローカル環境にgitをインストールする(Windows

 ローカル環境へのインストールで特に躓くことはないと思います。インストーラーをダウンロードして実行するだけです。下記のリンクからダウンロードできます

 インストーラーは英語表記なので、細かい設定項目が何を意味しているかわからないという方は、下記のリンク等をご参照ください

 

デプロイ環境にgitをインストールする(Linux

 こちらも簡単にインストールできます。SSHでログインし、yumコマンドでインストールします

$ sudo yum install git

 

Bitbucketアカウントを作成をする

 https://bitbucket.org/へアクセスしてアカウントを作成してください。作成手順などは以下のリンクが参考になるかと思います

 上記のサイト様ではSourcetreeへの登録手順もご紹介なさっています。SourcetreeはBitbucketを提供しているAtlassian社の別のサービスです。Gitは通常コマンドライン上から操作するのですが、SourcetreeはGitをグラフィカルなインターフェースから操作することができます。コマンドを覚えるのが面倒な方や直感的な操作性を求める方は、Sourcetreeも合わせて利用されるといいでしょう

ローカルリポジトリを作成し、Bitbucketにpushする

 ローカル環境の適当な場所にリポジトリを収納するフォルダを作成し、そこにリポジトリを作成してみましょう
 Gitbushを起動してコマンドラインから操作します。最初に紹介したチュートリアルを既にご覧いただいた方は理解されていると思いますが、一応記述しておくと以下のようになります

$ git init
$ git config  user.name "ユーザ名"
$ git config  user.email ユーザ名@example.com

 続いて、同フォルダ内に適当なファイルを作成します。任意の内容のテキストファイルで構いません。コマンドから作成してもいいですし、ローカル環境がWindowsであれば右クリックから新規作成→テキストファイルでも構いません
 ファイルを作成したら、リポジトリの変更をステージングしてコミットしましょう

$ git add 作成したファイル名
$ git commit

 テキストエリアが表示されたら、コミットメッセージを記述し保存してください。テキストエディタ(vi)の使い方がわからない方は別途お調べください。簡単に説明すると、「i」キーで挿入モード(一般的なキーボード入力)に切り替わり、「Esc」キーでコマンドモードに切り替わります。コマンドモードから「:wq」と入力してEnterキーを押せば保存して終了です。単に終了する場合は「:q」を押してください。保存せずに強制終了する場合は「:q!」です

 さて、これでリポジトリの変更内容がコミットされました。git logコマンドでコミットメッセージを確認してみてください
 次はこのリポジトリをBitbucketへpushします。ちなみに、ローカルリポジトリに対してBitbucketのようにネットワーク上に配置されたリポジトリはリモートリポジトリと呼ばれます。つまり、これからやることはローカルでの変更内容をリモートへ反映させる作業ということです
 まずはBitbucketのアカウントページからリポジトリを作成してください。作成できたらローカルのGitbushに戻り、リモートリポジトリの設定を行います

$ git add remote origin リモートリポジトリのURL

 これでリモートリポジトリにoriginという名前とそのアドレスが登録されました。リモートにあるリポジトリを基点にして作業するので、リモートリポジトリがorigin(原本)というわけです。リモートリポジトリのURLはbitbucketのアカウントページからリポジトリを選択→Cloneボタンをクリックすれば確認できます。また、設定したリモート先をGitbushから確認したいときはgit remote -vで見られます。
 リモートリポジトリの設定が完了したので、ローカルリポジトリをリモートへpushしてみましょう

$ git push origin master

 masterというのはリポジトリを作成した際にデフォルトで用意されるbranch(枝)です
 branchを簡単に説明すると、リポジトリをある時点から分岐させた際に、枝分かれした方のリポジトリを指し示すためのポインタです。ある変更点に遡ってリポジトリを復元させたり、枝分かれしたリポジトリをmerge(結合)させるときなどに指定します
 branchを切るときはどこから切るか指定する必要があるわけですが、既に用意されているmasterから切っていくことになるので、masterが最初の親ブランチとなります。この辺りの詳細はリンクのチュートリアルに譲りますので、ご一読いただければ幸いです

 無事pushできたら、bitbucketの方で内容が更新されているかどうか確認しましょう。作成したテキストファイルがリポジトリに追加され、コミットメッセージが表示されていればOKです

 ところで、git cloneコマンドで複製されたリポジトリにはクローン元(origin)のコミットとブランチを示すリモートブランチというものが存在します。リモートリポジトリがどこまで更新されているのか分かるようになっているのですが、今回はローカルからリモートにpushしただけなので、originのコミットやブランチの状態を示すデータがありません。これをリモートから取って来ましょう

$ git fetch origin

 取得できたら、以下のコマンドで確認してみてください

$ git log --graph --pretty=format:'%s %d'

 origin/masterやorigin/HEADが表示されていればOKです。他に誰も変更を加えていなければ、master,origin/master,origin/HEADが横並びになっているかと思います

デプロイ環境からBitbucketへssh接続する

 Bitbucketとデプロイ環境を接続するために、SSH認証の公開鍵と秘密鍵を作成します。まずはsshクライアントからデプロイ環境にログインしてください。前回の記事で作成したAWSのAmason Linuxインスタンスであれば、ec2-userのホームディレクトリ内に.sshディレクトリがあるので、そこに鍵を保存します

$ cd ~/.ssh
$ ssh-keygen -t rsa -C Bitbucketに登録したメールアドレス 

 作成したらcatコマンド等でid_rsa.pubの内容をコピーしてください
 次にBitbucketのアカウントページに移動し、左下のユーザアイコンから「Bitbucket Settings」を選択してください。続いてセキュリティの項目内の「SSH鍵」を選択し、「鍵を追加」をクリックします。「key」のテキストボックスにコピーした内容を貼り付け、「保存」をクリックすればsshキーの設定は完了です。「label」の項目は自由に設定してください
 再びsshクライアントに戻り、今度はssh接続の設定を行います。.sshディレクトリ内にconfigファイルを作成しましょう

$ vi config
Host bitbucket.org
 HostName altssh.bitbucket.org
 User git
 Port 443
 IdentityFile ~/.ssh/id_rsa
 TCPKeepAlive yes
 IdentitiesOnly yes

 ※22番ポートだと接続できないので注意してください

 秘密鍵パーミッションを変更します。変更しないと警告が表示されて繋いでくれません

$ chmod 600 ~/.ssh/id_rsa

 Bitbucketに接続してみます。「logged in as ユーザ名」と表示されれば成功です

$ ssh -T bitbucket.org


 今回はここまでです。お疲れさまでした
 実際にリモートからデプロイ環境へpullする工程は、また後日説明いたします