Git勉強会に触発されてGit環境を作ってみたよ

10/4〜5に掛けて、OSC2008Tokyo/FallGit勉強会OSC後Hackathonという3HitComboをやってきた訳ですが、もう色々と盛りだくさんで、何を書いていいやら…という事で、感想とかはバッサリ省略。<おい

なので、Gitの話だけに絞って、なおかつ、環境構築の備忘録メインで書こうかと思います。

ということで、Git勉強会についてさらりと…。今回は、Gitのメンテナーである濱野さんをお迎えして、Gitの概要というところから簡単な例を交えての使い方をお聞きしました。

内容の詳細に関しては、id:kinnekoさんが詳しいメモを公開されているので、それに便乗しておきます。
Git(ギット)勉強会メモ - kinneko@転職先募集中の日記

当日、濱野さんが使われていた資料も公開されているので、そちらもリンクを張っておきます。
http://www.kernel.org/~junio/200810-tut.pdf

で、私自身はGitに関しては正直なところ、「なんとな〜くどんなものか知っている」という程度の認識で、使った事はありませんでした。が…濱野さんのお話を聞いて、「これは使うしかないでしょ…JK」という思いに駆られ、早速導入してみる事にしました。

という訳で、導入の記録。とりあえず、自宅サーバ(Linux)上にリポジトリを作って、PCからpush/pullするという、集中リポジトリ型の環境を作ってみました。*1

自宅サーバ上にGitリポジトリを作成する

Gitのインストールはソースからコンパイルして入れました。その辺りの手順は、お約束のconfigure→make→make installなので省略…。

今回は、以下のような条件を前提にしています。

$ su -
# groupadd git
# useradd -g git -m git
# passwd git
# exit
$ su - git
% mkdir public
% exit
$ cd /home/user/project
$ git init
$ git add .
$ git commit -m 'Initialize.'
$ su - git
% cd public
% git clone --bare /home/user/project project.git

これで、とりあえず公開リポジトリとしての準備はOK。

PCからリポジトリにアクセスできるようにする

Windows用Gitクライアントをインストールする

Windows から Git を使う方法 - 夜の Discoveryなどを参考に、msysgitをインストールします。

サーバにSSHアクセスできるよう設定する

リモートリポジトリにアクセスできるようにする為にはSSHでの接続が必要になるので、Puttyでサーバにアクセスできるように準備しておきます。手順としては、以下のような感じ。細かいところは省略。

  • puttygen.exeを起動して、"Generate"ボタンを押してpublic/privateキーのペアを作成する。
  • "Save public key"/"Save private key"でpublic/privateキーをファイルとして保存する。
  • publicキーをリポジトリのあるサーバ上の、gitユーザのホームディレクトリの.ssh配下に保存する。(どこに保存するかはsshdの設定次第。authorized_keysに追記しておけばとりあえずはOKなのかな?)
  • pageant.exeを起動して、"Add Key"で作成したprivateキーを登録する。

この辺は、人によって若干手順が違うかもしれませんが、とりあえず、PCからサーバにSSHアクセスできれば大丈夫だと思います。自分の場合は、gitユーザではなく、自分のユーザ名でSSHアクセスできるようにしてあったので、それを再利用するようにしました。

PC上にリポジトリのクローンを作ってみる

コマンドプロンプトを開いて、適当なフォルダでgitコマンドを実行します。

C:\git>git clone ssh://git@server/home/git/public/project.git project
Initialized empty Git repository in C:/git/project/.git/
remote: Counting objects: 101, done.
remote: Compressing objects: 100% (93/93), done.
remote: Total 101 (delta 20), reused 0 (delta 0)
Receiving objects: 100% (101/101), 102.62 KiB, done.
Resolving deltas: 100% (20/20), done.

こんな風に転送のメッセージが出てくればOK! これで、PC上で好き放題開発を進めて、ソースコードの同期も楽に管理できる!…はず…。ここまでできたところでこの記事を書いているので、ブランチを作ったりマージしたりpushしたりpullしたり…etc...はこれから勉強するところです。(^^;ゞ

ちなみに、最初はサーバ上にgit-daemonを立てて、git-daemon経由でアクセスしようと頑張っていたんですが何だかあまりうまくいかず…。でも、色々調べてたところ、git-daemonはReadOnlyだから、pushできないみたいだし、結局、SSH接続できるようにしないとダメみたいで、結果オーライだったのかな…? gitプロトコルリポジトリを公開する時にはgit-daemonが必要なのかもしれませんね。

あと、一点ハマったポイントがあって、PCから"git clone"とかでアクセスした時に、

No value for $TERM and no -T specified

というエラーが出て困ったんですが、サーバ上のgitユーザの.bashrcに"export TERM=xterm"と追記したらOKでした。これは自分の環境の問題なだけかもしれませんが…。


そんな訳で、やっとこさGit環境が整った訳ですが、実は、OSC後Hackathonで、PC上にRails環境を作って、自宅サーバ上のRails環境と同期できるようにと思ってGit環境を一生懸命作っていたんですが、途中で力尽きてしまいました。(^^;ゞ Hackathon会場では朝まで生議論が延々と続いていたので、もっとお話にも参加したかったんですが、無念…。

という事で、今回はGit環境構築編だった訳ですが、環境構築の過程でネットで色々と調べながらやっていたんですが、日本語のソースだと、今回やったような集中リポジトリ型の例が多くて、相互にpush/pullし合う、分散型開発の例が少なかったかなぁという印象がありました。

その辺り、分散型開発の面白さみたいなのを、絵を入れながら書いてみようかなぁと思っています。自分の認識が間違っている部分もあるかもしれないので、ツッコミを期待したいというのもありますが。(^^;ゞ

では、最後にお約束…。Git++!

*1:それじゃ、結局Subversionと変わらんじゃないか…というツッコミはもっともですが(^^;、今回はGit操作に慣れる事を目標にしました。