Home > git > gitの付き合い方(6)

gitの付き合い方(6)

5月 29th, 2010

コミットを重ねるとソフトウェアをリリースできるタイミングがやってくると思います。そんな時に便利なのがtagコマンドです。tagコマンドは特定のコミットにタグ(名前)をつけてくれるコマンドです。最新のコミットにversion-1.0というタグ名をつけるには以下のようにします。

$ git tag version-1.0

また、

$ git tag version-0.9 [revision]

のように、リビジョン名を指定することもできます。タグを一覧するには次のようにします。

$ git tag
version-0.9
version-1.0

またタグに対するコミットのリビジョン名を確認するにはrev-parseコマンドを使います

$ git rev-parse version-0.9
848455705dfe43c5c7ad5176ef1826bd8a9e55b2

ソフトウェアのソースリリースは、Linuxではtar形式でアーカイブしたものを圧縮した、tar.gzやtar.bz2の形で行うことが多いと思います。gitレポジトリから特定のタグのついたコミットのアーカイブを取り出すにはarchiveコマンドを使うと便利です。

$ git archive --format=tar --prefix=myprogram/ version-1.0 | bzip2 > version-1.0.tar.bz2

展開してみるとこのよう構成になっています。–prefixが展開した時のトップディレクトリを指します。

$ tar jxvf version-1.0.tar.bz2
myprogram/
myprogram/file1
myprogram/file2
myprogram/file3

さて、ここでブランチの話をしましょう。ブランチはgitを用いた開発に大変大切な機能です。ブランチ(branch)とは「分岐」を意味します。ブランチはレポジトリ内に作られた一連のコミット群を差し、カレントブランチを指定することで現在手元にあるブランチを切り替えることができます。

例えばソフトを安定版と開発版の二つのブランチにわけて開発したり、リスクの高い機能を実験的に実装するブランチを作ったりといった形で利用します。実際に実験してみましょう。branchコマンドを引数なしで実行すると現在存在するブランチを表示します。

$ git branch
* master

masterは最初から存在する標準のブランチです。新しいブランチを作ってみましょう。

$ git branch test
$ git branch

* master
test

ブランチを切り替えるにはcheckoutコマンドを使います。

$ git checkout test
Switched to branch “test”
$ git branch
master
* test

この時点でmasterブランチとtestブランチの内容は同じです。分岐の直後ですから当然ですね。以降、ひとつのブランチを選択しそこでコミットした内容はそのブランチだけに存在することになります。ブランチはいくつでも作ることができますし、どこから分岐することもできます。ブランチを切り替える前に作業ファイルのコミットをしていない場合にはブランチの切り替えができない場合があります。

作業ファイルの変更やステージングをしていてもブランチの切り替えができる場合は、双方のブランチの最新コミットでそのファイルの内容が一致している時です。以下はfile1とfile2に変更があった場合の例です。

$ git checkout master
M    file1
M    file2
Switched to branch “master”

作業ファイルの変更だけでなくステージングの状態も引き継がれます。これに対し、ブランチ作成後にすでにfile1の変更のコミットが行われていたような場合には以下のようにブランチの切り替えに失敗します。

$ git checkout test
error: You have local changes to ‘file1′; cannot switch branches.

混乱を避けるためにも、ローカルファイルの変更をブランチ切り替えで持ち越さないことにした方がいいと思います。切り替え前にコミットしてしまうか、また切り替え元でコミットをしたくないが、作業ファイルの変更は失わずに切り替えしたい時には、stashコマンドを使います。stashコマンドについては次回説明することにします。

さて、checkoutとブランチ作成は同時に行うこともできます。

$ git checkout -b test
Switched to a new branch “test”

また、最新のコミット以外からブランチを作るときには以下のようにします。

$ git checkout -b test d7eb9cd54c9cc1e74b7aef7ae7a12e19d37245b4
Switched to a new branch “test”

ブランチ名を指定せずにコミットを指定してチェックアウトすると、「一時的」なブランチが作られて切り替えられます。このブランチは一度、他のブランチに移動すると戻ってこれないブランチですが、あるリビジョンを一時的に取り出して参照したい時には重宝します。

$ git checkout 90af3556dc94f018692495b1e71ccac0f2fcb26
Note: moving to “90af3556dc94f018692495b1e71ccac0f2fcb26″ which isn’t a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 90af355… file1 changed
$ git branch
* (no branch)
master

さて、ブランチを切り替えるcheckoutコマンドですが、このコマンド以前にもステージングあるいは特定のリビジョンからファイルを取り出すコマンドとして出てきました。checkoutコマンドにファイルを指定した時とブランチを指定した時には別の動作をすることを覚えておきましょう。

次回はstashコマンドに加えて、分岐したブランチを統合するmergeコマンドの話をします。

git

  1. No comments yet.
  1. No trackbacks yet.