分散バージョン管理システムGit入門Beginner's Guide(2/3 ページ)

» 2009年02月09日 08時00分 公開
[松島浩道,SourceForge.JP Magazine]
SourceForge.JP Magazine

Gitのインストール

 各種Linuxディストリビューションや各種BSDでGitを利用するなら、多くの場合システム標準のパッケージマネージャでGitをインストールできる。また、最新版のRPM/DebパッケージやMac OS X向けのインストーラ、ソースコードについてはGitのダウンロードページに入手先へのリンクが掲載されている。

図5 図5 msysGitのインストール先

 一方、WindowsでGitを使いたい場合はCygwinを利用するか、もしくはMinGW/MSysを使用したバイナリを配布しているmsysGitを利用する。msysGitを利用するとGitの利用に必要なbashやSSH、mvやrm、lsといった各種UNIX互換コマンド、Perlなどをまとめて導入できるほか、簡単なGUIツールも付属している。ただし、GitとSubversionを連携させる「git-svn」などは含まれない。Cygwinを利用している場合やそのほかのUNIX/Linux由来アプリケーション、git-svnなどを利用したい場合はCygwinを、Gitのみを利用したい場合はmsysGitを利用するとよいだろう。なお、msysGitはデフォルトでは「C:\Program Files\Git\」以下に各種ツールをインストールするので、Cygwinと共存させることも可能だ(図5)。

Gitを使った基本的なプロジェクト管理:ローカルリポジトリの作成

 Gitを使ったソースコード管理は、まずローカルリポジトリを作成することから始まる。ローカルリポジトリを作成するには2つの方法がある。新規にプロジェクトを立ち上げる場合や、別のバージョン管理システムからGitに切り替える場合など、すでにローカルにGitで管理したいファイルがある場合は、ファイルが格納されているディレクトリで「git init」コマンドを実行すればよい。例えば、「/home/test/test」ディレクトリをローカルリポジトリにする場合、後記のように実行する。


$ cd /home/test/test
$ git init
Initialized empty Git repository in /home/test/test/.git/

 一方、、Gitでファイル管理を行っているプロジェクトに参加する場合や、Gitで管理されているソースコードを入手したいという場合は「git clone <リポジトリ>」コマンドを利用する。例えば、「git.sourceforge.jp/gitroot/test/test.git」というリポジトリからファイルをダウンロードしてローカルリポジトリとする場合、次のように実行する。


$ git clone git://git.sourceforge.jp/gitroot/test/test.git
Initialized empty Git repository in /home/test/.git
remote: Counting objects: 857, done.
remote: Compressing objects: 100% (494/494), done.
remote: Total 857 (delta 339), reused 845 (delta 333)
Receiving objects: 100% (857/857), 8.63 MiB | 1089 KiB/s, done.
Resolving deltas: 100% (339/339), done.
Checking out files: 100% (1120/1120), done.

変更のコミット

 管理しているファイルに変更を加えた後、コミットを行うことで変更点がGitに記録される。コミットを行うには、「git commit」コマンドを利用する。なお、CVSやSubverseionなどの場合、コミット対象を省略すると変更したファイルが自動的にコミット対象となったが、Gitの場合はコミットするファイルを「git add」コマンドで明示的に指定する必要がある。「git status」コマンドを実行することで修正されたファイルを確認できるので、修正されたファイルのうちコミットしたいファイルを確認し、git addでコミット対象に追加するとよいだろう。

 例えば、Gitでバージョン管理を行っているファイルに変更を加えた状態でgit statusコマンドを実行すると、後記のように「Changed but notupdated:」以下に変更が加えられたファイルが表示される。


$ git status
# On branch master
# Changed but not updated:
#   (use "git add ..." to update what will be committed)
#
#       modified:   HBPreferencesTransFormer.h
#       modified:   HBPreferencesTransFormer.m
#
no changes added to commit (use "git add" and/or "git commit -a")

 この例の場合、「HBPreferencesTransFormer.h」および「HBPreferencesTransFormer.m」が変更されたファイルだ。そこで、git addコマンドでこのファイルをコミット対象に追加する。


$ git add HBPreferencesTransFormer.*
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       modified:   HBPreferencesTransFormer.h
#       modified:   HBPreferencesTransFormer.m

 git addコマンドでは変更されたファイルだけでなく、新たに作成したファイルも追加できる。一通りコミットしたいファイルを指定したら、最後に「git commit」コマンドでコミットを実行する。


$ git commit
Created commit a3ab45b: Add ValueTransformer method.
 2 files changed, 31 insertions(+), 3 deletions(-)

 なお、「git commit -a」のように-aオプション付きでコミットを実行することで、変更されたファイルを自動的にコミット対象に加えてコミットを実行することもできる。

ローカルリポジトリに加えた変更をリモートリポジトリに送信する

 ローカルリポジトリに加えた変更をリモートリポジトリに送信するには、「git push <リポジトリ名>」コマンドを利用する。ローカルリポジトリでの作業が一段落し、加えた変更点をマスターリポジトリ(SourceForge.JPのGitリポジトリなど)に送信する場合などに、このコマンドを利用する。

 例えば、ユーザー名「hoge」で「git.sourceforge.jp:/gitroot/test/test.git」というリポジトリに変更点を送信したい場合、次のように実行する。


$ git push hoge@git.sourceforge.jp:/gitroot/test/test.git
Counting objects: 9, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 841 bytes, done.
Total 5 (delta 3), reused 0 (delta 0)
To test@git.sourceforge.jp:/gitroot/test/test
   cf6c47c..a3ab45b  master -> master

 なお、自分が行った変更と競合するような変更がすでに行われていた場合、次のようなメッセージが表示されてpushに失敗する。


$ git push hoge@git.sourceforge.jp:/gitroot/test/test.git
To hoge@git.sourceforge.jp:/gitroot/test/test.git
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to 'hoge@git.sourceforge.jp:/gitroot/hoge/hoge'

 この場合、競合を解消してから再度pushを実行する必要がある。最も簡単なのは、後述する「git pull」コマンドを使用して競合部分を取得し、ローカルリポジトリを修正する方法だ。

SourceForge.JPでGitリポジトリを利用する場合の注意点

 SourceForge.JPでは、各プロジェクトが利用できるGitリポジトリが用意されている。リポジトリの作成は、各プロジェクトの「ソースコード」タブ内にある「Gitリポジトリ管理」で行える。

 なお、リポジトリ作成後の初回のpush時は、後記のように明示的にブランチを指定する必要があるので注意してほしい(この例では「master」がブランチ名)。


$ git push hoge@git.sourceforge.jp:/gitroot/test/test.git master
Enter passphrase for key '/home/hoge/.ssh/id_dsa':
Counting objects: 847, done.
Compressing objects: 100% (817/817), done.
Writing objects: 100% (847/847), 8.64 MiB | 332 KiB/s, done.
Total 847 (delta 333), reused 0 (delta 0)
To hoge@git.sourceforge.jp:/gitroot/test/test.git
 * [new branch]      master -> master


Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ