Geek-Side

このエントリーをはてなブックマークに追加  

2013/02/26
Git-1.7.12.4

Gitのインストールと設定

ページ内索引
Gitのインストール
Gitの設定
Gitクライアントからのアクセス
共有リポジトリの作成

ソースやドキュメントのバージョン管理が常識になってきました。本サイトでも紹介しているSubversionを利用している方も多いのではないでしょうか。
Gitは分散バージョン管理と呼ばれるもので、Linux自体のソースコード管理で用いられています。
Subversionと比較すると下記のような利点が挙げられます。

  • オフラインでもコミットできる
  • Subversionに比べてBranchの切り替えが高速
他にも様々な利点がありますが、Gitをベースとしたリポジトリサービス、GitHubの存在も大きいでしょう。
Githubを利用すれば自前でサーバーを用意する必要はありません。privateモードを利用すれば、クローズドなバージョン管理も可能です。
とはいえ、自前でサーバーを管理したい場合もあるかと思います。このページではGitサーバーのインストールと設定について説明します。


Gitのインストール

Gentoo LinuxでGitをインストールする際の手順です。

# emerge git

インストールされたGitのバージョンは1.7.12.4 でした。

Gitの設定

Gitの設定ファイルは、/etc/conf.d/git-daemon になります。

# conf.d file for git-daemon
#
# Please check man 1 git-daemon for more information about the options
# git-daemon accepts. You MUST edit this to include your repositories you wish
# to serve.
#
# Some of the meaningful options are:
#   --syslog      --- Enables syslog logging
#   --verbose     --- Enables verbose logging
#   --export-all  --- Exports all repositories
#   --port=XXXX   --- Starts in port XXXX instead of 9418
#
GITDAEMON_OPTS="--syslog --base-path=/var/git"

# To run an anonymous git safely, the following user should be able to only
# read your Git repositories. It should not able able to write to anywhere on
# your system, esp. not the repositories.
GIT_USER="nobody"
GIT_GROUP="nobody"

デフォルトの設定では、syslogにログを出力し、リポジトリを格納するベースパスが /var/git になっています。
また、実行ユーザーはnobody、グループはnobodyになります。

リポジトリをexportできるようにするためには、--export-allオプションを追加します。
リポジトリごとに制御したい場合は、.gitディレクトリにgit-daemon-export-okファイルの有無で制御できます。

Gitがデータを管理するリポジトリと呼ばれる格納庫を作成します。
例では/var/git/reposにリポジトリを作成しています。

# リポジトリ用のディレクトリを作成
# mkdir /var/git/
# オーナーをnobodyユーザー、nobodyグループに変更
# chown nobody:nobody /var/git/ # nobodyユーザーにスイッチ
# sudo -u nobody -s
nobody@localhost $ cd /var/git/
nobody@localhost $ mkdir project
nobody@localhost $ cd project
nobody@localhost $ git init
# git-daemonを--export-all オプションを付けずに起動している場合に、このリポジトリをexport可能にします。
nobody@localhost $ touch git-daemon-export-ok
Initialized empty Git repository in /var/git/.git/

git-daemonを起動します。

# /etc/init.d/git-daemon start
* Caching service dependencies ... [ ok ]
* Starting git-daemon ... [ ok ]

Gitクライアントからのアクセス

クライアントからソースをcloneします。 gitサーバーのIPは192.168.122.101です。

# git clone git://192.168.122.101/project project
Cloning into 'project'...
warning: You appear to have cloned an empty repository.

共有リポジトリの作成

上記のリポジトリはcloneはできますが、リモートから編集できない読み取り専用のリポジトリになっています。
pushをして多人数で編集することはできません。
複数人で開発するときは共有リポジトリを作成します。

このページではSSHでリポジトリにアクセスする例を示します。 git-daemonを実行し、共有リポジトリのオーナーになるユーザーを作成します。
このオーナーのグループに所属するユーザーを作成することで、リポジトリを操作できるようにします。

# 共有リポジトリのオーナーになるgitユーザーを作成
$ useradd -g git git
# gitのベースリポジトリをgitユーザーにする。
$ chown -R git.git /var/git/

git-daemonの設定、/etc/conf.d/git-daemonを変更します。
ユーザーとグループを先ほど作成したもgitユーザー、gitグループに変更します。

GIT_USER="git"
GIT_GROUP="git"

gitユーザーで共有リポジトリを作成します。
git@localhost mkdir project.git
git@localhost cd project.git/
git@localhost git init --bare --shared=true
Initialized empty shared Git repository in /var/git/project.git/

Gitクライアントからアクセスします。
SSH経由でアクセスしている例です。あらかじめSSHでアクセスできるユーザーをサーバーに作成しておきます。
このユーザーはgitグループに所属している必要があります。

# gitグループに所属するuser1を作成
$ useradd -g git user1

クライアントからサーバーにアクセスします。
# リポジトリからクローンする。
$ git clone ssh://user1@192.168.122.101/var/git/project.git
Cloning into 'project'...
Password:
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 12 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (12/12), 1.00 KiB, done.
Resolving deltas: 100% (2/2), done.

ファイルを編集して、共有リポジトリにプッシュします。
# ファイルを作成する
$ touch foo
# 作成したファイルをコミット対象とする
$ git add .
# 作成したファイルをコミットする
$ git commit -m "test commit"
[master b839a8d] test commit
0 files changed
create mode 100644 foo
# コミットをプッシュする
$ git push
Password:
Index
Gitのインストールと設定

このエントリーをはてなブックマークに追加   ツイート