Gitでソースコードを管理してみよう

ソフトウェア開発の基本的な流れは、プログラムを書いてコンパイル(ビルド)してソフトウェアを作成するというのがあります。とても簡単に言うとこの「プログラムの修正や追加」>「ビルド」を繰り返してソフトウェアのバージョンが上がっていきます。
ただ近頃ではソフトウェアという言葉をあまり聞かなくなり、「アプリ」が世の中を席捲しています。これはおそらくスマホやタブレットの普及により、利用するもののスタンダードがパソコンから変わってきているためかと思います。開発環境が違うだけで、アプリ開発も基本的な流れはソフトウェア開発と同じです。また、Webアプリ開発と言われるものも、ビルドする工程が無いだけでプログラムの修正や追加でバージョンを上げていく流れは同じです。
そこで共通して発生する作業が、プログラムの修正や追加の管理、つまり「ソースコードの管理」になります。毎日ソースコードをいじって更新することにより、いつどのように更新されたかわからなくなります。ソースコードをバックアップする必要もありますし、またどのバージョンのソースコードをいじっているのかを整理する必要もあります。
そういったソースコードを管理してくれるのがGit(ギット)です。GitはLinuxカーネルのソースコードを管理するために開発されました。これまではCVSやSVNを使って管理していた方もいるかと思います。いまはGitが多く使われています。その違いを簡単に説明すると、集中型と分散型の違いになります。SVNは集中型でGitは分散型になります。
ファイルやソース変更履歴などを保存する場所をリポジトリといいます。
集中型はリポジトリが1箇所で、作業するメンバーはすべて1つのリポジトリを使ってソースコードの更新を行います。このリポジトリにアクセスできないと更新作業ができません。

集中型(SVN)

svn

分散型はリポジトリがリモート(サーバー)とローカル(クライアント)に分かれて複数あります。これにより普段の更新作業をローカルで行い、ある程度作業が進んだ時点でリモートで更新することで自分の更新や他メンバーの更新を反映できます。つまりリモートにアクセスできない環境でも個別の更新ができます。

分散型(Git)

git

Gitを使ったソースコード管理の基本的な流れ

簡単に言うと「ソースコード修正」>「保存」の繰り返しを行うのですが、Gitを使った流れが以下になります。
0.Gitを使うための前設定
1.Gitで管理するためのリポジトリを作成(もしくはコピー)
2.ソースコード修正(ファイルを作成したり変更したり)
3.修正したソースコードのファイルのインデックスをリポジトリに追加
4.変更をローカルリポジトリにコミット
5.ローカルリポジトリをリモートリポジトリへインデックスを追加
6.ローカルリポジトリをプッシュしてリモートリポジトリへ反映

0.Gitを使うための前設定

Gitを使うためにはユーザー名とメールアドレスを事前に設定しておく必要があります。設定しないと以降のコマンドがエラーとなる可能性があります。この情報は、~/.gitconfigに保存されます。

$ git config --global user.name “hoge hoge"
$ git config --global user.email hogehoge@example.com

1.Gitで管理するためのリポジトリを作成(もしくはコピー)

リモートリポジトリとローカルリポジトリを作成します。

リモートリポジトリの作成

リポジトリを作成するサーバーのユーザーが特定されてなければ、リモートリポジトリ用のユーザーを作成します。以下はユーザーがあるものと仮定してのコマンドです。リモートリポジトリ用のディレクトリを作成(プロジェクト名.gitと作成)します。ここにリモートリポジトリを作成します。以降のコマンドはクライアントがサーバーへSSHでアクセスできる前提で記載します。

$ mkdir hogeproject.git
$ cd hogeproject.git
$ git init --bare --shared

これでリモートリポジトリは作成されます。

ローカルリポジトリの作成

ローカルでソースコード管理するプロジェクトのディレクトリに移動(なければ作成)します。このディレクトリには管理するソースコードのファイルがあります。ここにローカルリポジトリを作成します。

$ cd hogeproject
$ git init

これでローカルリポジトリは作成されます。

2.ソースコード修正(ファイルを作成したり変更したり)

こちらは普段のソースコードをいじる作業です。新しくファイルを作成したり、既存のファイルを修正したりします。

3.修正したソースコードのファイルのインデックスをリポジトリに追加

ローカルでインデックスを追加します。

$ git add hogeprogram.cc
Tips:
$ git add . 「.」を指定するとカレントディレクトリ配下の全てのファイルを追加します。
$ git add -u 「-u」を指定すると変更のあった全てのファイルを追加します。

4.変更をローカルリポジトリにコミット

インデックスを追加した後はローカルリポジトリにコミットします。これにより履歴が保存されます。

$ git commit

このコマンドを実行するとエディタが起動されてコメントの入力を求められます。入力後に保存してエディタを終了するとコミットが完了します。
入力するコメントには基本ルールがあります。1行目:変更の要約(50字以内)、2行目:空行、3行目:変更の詳細説明(72字以内)です。できるだけシンプルな記載をしたほうが、あとでログの確認時など読みやすいです。以下のコマンドでエディタを起動せずにコメントと一緒にコミットできます。

$ git commit -m “[コメント]"

5.ローカルリポジトリをリモートリポジトリへインデックスを追加

ローカルで作成したリポジトリからリモートへインデックスを追加します。

$ git remote add origin ssh://user@server/home/user/hogeproject.git

6.ローカルリポジトリをプッシュしてリモートリポジトリへ反映

リモートリポジトリへ変更を反映させます。

$ git push origin master

まとめ

以上で作業は完了です。普段は2〜4の作業を繰り返して、ある程度変更が進んだら5〜6を行ってまた2〜を繰り返します。

*全体のコマンドまとめ

サーバー側
$ mkdir hogeproject.git
$ cd hogeproject.git
$ git init --bare --shared

クライアント側
$ cd hogeproject
$ git init
$ git add hogeprogram.cc
$ git commit -m “[コメント]"
$ git remote add origin ssh://user@server/home/user/hogeproject.git
$ git push origin master

シェアする