Git はバージョン管理のためのパッケージです。
リポジトリをつくるには、GitHub などのサービスを利用するのが早いのですが、無料のプランでは公開リポジトリしか作れません。かといって有料のプランに申し込んでも非公開にできるリポジトリの数に限りがある。
ということで、Git と Gitolite を使って、リポジトリを作っていくことにします。
リポジトリを作るだけであれば Gitolite は必要ありません。
Gitolite を使わない場合、リポジトリを追加するために VPS にログインしてリポジトリを作ってから、ローカルからファイルを追加する という作業になるのですが、Gitolite を使った場合 VPS にログインすることなく、ローカルの作業だけでリポジトリの追加などができるので、設定しておくと便利になります。
- Git のインストール
- Gitolite を入れる下準備
- Gitolite のインストール
- Gitolito を使って、リポジトリを作る
- Gitolite にユーザーを追加する
- リポジトリにファイルを追加する
Git のインストール
Git をインストールしないと、何も設定できないので Git をインストールします。
1 | $ sudo yum -y install git |
これで Git のインストールが終わりました。
Gitolite を入れる下準備
Git のインストールが終わったので、Gitolite をインストールする前に Git専用のユーザーをつくることにします。Gitolite を使うときには、SSH 経由での接続になるため、SSH で作業するユーザーとは別のユーザーをつくり、SSH でできることに制限を加えることで、ある程度のセキュリティを確保します。
Gitolite 用のユーザーをつくる
下のコマンドで /home/git がホームディレクトリの git というユーザーを作ります。
1 | $ sudo /usr/sbin/useradd --shell /bin/bash --home /home/git git |
追加したユーザーで SSH接続ができるようにする
SSH をちょっとセキュアにしてみるよ♪ のルートでのログインを禁止するの章 で "AllowUsers ssh_user" と設定して、SSH で接続できるユーザーを制限したことを覚えていますか??
このままだと git ユーザーで SSH接続をすることができないので、/etc/ssh/sshd_config を編集して、SSH接続ができるようにします。
1 2 3 4 | $ sudo vi /etc/ssh/sshd_config # AllowUser ssh_user AllowUser ssh_user git |
設定の変更が終わったら、SSH を再起動して設定を適用します。
1 | $ sudo /etc/init.d/sshd restart |
さぁ、これで git ユーザーで接続っ!!。。。できません。
SSH接続は公開鍵暗号方式での接続のみ許可をするように設定しているので、git ユーザー用の公開鍵と秘密鍵を作りましょう。
ここからローカルでの作業になります。
ローカルの ~/.ssh に移動して、公開鍵と秘密鍵をつくります。
鍵をつくるときはパスワードは入力しなくても、Gitolite が制限をつけてくれるので、入力しなくてもかまいませんが心配性な方はつけてください。ただしリポジトリにアクセスするときにパスワードの入力が必須になるので、ちょっとめんどくさいです。
ここでは git-admin という名前で鍵を作成。この名前がリポジトリにアクセスするときのユーザー名になるので、id_rsa のまま作成しないようにしてください。
1 2 3 4 5 6 7 | $ cd ~/.ssh $ ssh-keygen -t rsa Enter file in which to save the key (/home/git/.ssh/id_rsa): git-admin Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in git-admin. |
鍵ができたら、公開鍵をサーバーに送ります。下のコマンドは SSH をさらにセキュアにしてみるよ♪ の公開鍵暗号方式で SSH の章 のように "ssh exp" で サーバーに接続ができることを前提にしています。
1 2 3 4 | $ scp ~/.ssh/git-admin.pub exp:~/ SSH をさらにセキュアにしてみるよ♪ の設定をしていない場合 ( たぶんあってるかな?? ) $ scp -P 10022 -i ~/.ssh/example_key ~/.ssh/git-admin.pub ssh_user@example.com:~/ |
こんな長いコマンドはいやだ。。。
ぜひ SSH の設定の記事を参考に ~/.ssh/config の設定をしてください。
ローカルの作業はここまで
ここからサーバーでの作業
上で転送した公開鍵の所有権を git ユーザーに変更して、/home/git に移動させておきます。
1 2 | $ chown git:git git-admin.pub $ sudo mv ~/git-admin.pub /home/git |
ここまでで Gitolite をインストールする準備は終わりです。長くなりましたが、ほとんどは SSH で作業するユーザーを追加したときと同じ作業をしただけです。
Gitolite のインストール
ここからは git ユーザーとして作業をすすめていきます。
1 | $ sudo su - git |
サーバーに Gitolite をインストールする
Gitolite は Github で公開されているので、Git を使ってソースコードをダウンロードします。とりあえず作業用のディレクトリをつくってインストールの作業をしましょう。Git を管理するためのパッケージのインストールする。。。非常に興味深い
1 2 | $ mkdir ~/tmp; cd ~/tmp $ git clone git://github.com/sitaramc/gitolite |
ダウンロードが終わったら、Gitolite のインストールをします。gl-system-install を実行すると /home/git/bin に PATH がはられ、そこに Gitolite の使うコマンド群がインストールされます。そして gl-setup コマンドに、git ユーザーの公開鍵を与えると 自動で鍵をつかったアクセスができるように設定してくれます。
1 2 | $ ~/tmp/gitolite/src/gl-system-install $ gl-setup ~/git-admin.pub |
インストールがおわったら、必要のないファイルを処分しておきます。公開鍵も Gitolite が ~/.ssh/authorized_keys にコピーをしてくれているので、必要ありません。
1 2 | $ rm -rf ~/tmp/* $ rm -rf ~/git-admin.pub |
サーバーでの作業はここまで
ここからローカルでの作業になります
ローカルから Gitolite 経由でアクセスができるようにする
Gitolite 経由でリポジトリにアクセスするときには コマンドで SSH の使うポートやSSH のユーザー名、秘密鍵などの指定ができません。そこで ~/.ssh/config を編集することで、ポートなどを指定していきます。
1 2 3 4 5 6 7 | $ vim ~/.ssh/config
Host git-admin.example.com
HostName example.com
User git
Port 10022
IdentityFile ~/.ssh/git-admin |
設定はそれぞれ以下のようになっています
- Host git-admin.example.com
- ssh git-admin.example.com で接続できるようにする
- HostName example.com
- 実際に接続するホスト名
- User git
- SSH の接続ユーザーを指定する。git ユーザー
- Port 10022
- SSH での接続につかうポート番号
- IdentityFile ~/.ssh/git-admin
- 秘密鍵を指定する。git-admin としてリポジトリにアクセスすることになる。
混乱しやすいところとしては、SSH で接続するのは git ユーザーなのですが、リポジトリにアクセスするときは、git-admin になります。( 秘密鍵の名前がそのままリポジトリにアクセスするユーザー名になる )
~/.ssh/config の設定が終わったら、リポジトリからファイルをダウンロードしてみます。
1 2 | $ mkdir ~/tmp; cd ~/tmp $ git clone git-admin.example.com:gitolite-admin |
リポジトリをダウンロードするときの書式は git clone "SSHのアクセス先":"リポジトリ名" になります
gitolite-admin リポジトリがダウンロードできれば、Git・Gitlite のインストールは、ほとんど終わりです。次からは実際にリポジトリを作成していきます。
Gitolito を使って、リポジトリを作る
Gitolite でリポジトリをつくる方法はものすごく簡単です。
先ほどダウンロードした gitolite-admin リポジトリの中の gitolite-admin/conf/gitolite.conf というファイルを編集して、リポジトリを追加することができます。実際にリポジトリを追加してみましょう♪
1 2 3 4 5 6 | $ vim ~/tmp/gitolite-admin/conf/gitolite.conf repo gitolite-admin RW+ = git-admin repo test-repo RW+ = git-admin |
ここでは test-repo というリポジトリを追加しています。このファイルの書式は以下のようになっています。もしかしたら元々 test-repo というリポジトリはあったかも。。。そのときは別の名前で追加してください。
- repo test-repo
- リポジトリの名前
- RW+= git-admin
- 読み書き/rewind する権限を git-admin というユーザーに与える
RW+ の部分は権限を表しています。
- R: 読み込み権限
- W: 書き込み権限
- +: rewind 権限 ( リポジトリを過去の状態にもどすための権限 )
たとえば以下のようにユーザーごとに権限を変更することもできます。
1 2 3 4 | repo test-repo RW+ = git-admin takatomo R = example RW = git-user |
この場合、git-admin, takatomo というユーザーには全ての権限を、example はリポジトリを読み込むだけ、git-user は 読み込みと書き込みができる権限を与えるという設定になります。
その他、グループ化して管理するための設定などは "Pro Git - Pro Git 4.8 Git サーバー Gitolite" に詳しくあるので、興味のある方は参考にしながら設定してください。
gitolite.conf の編集が終わったら、変更したファイルをリポジトリに追加して、サーバーに送ります。
1 2 3 4 | $ cd ~/tmp/gitolite-admin $ git add . $ git commit -m "ADD: test-repo" $ git push |
サーバーにプッシュすることで、あとは Gitolite が自動で test-repo というリポジトリを作ってくれます。
Gitolite にユーザーを追加する
ユーザーごとにアクセス権を設定できることは紹介しましたが、どうやったらユーザーの追加ができるのかは触れていませんでした。ここでは リポジトリにアクセスできるユーザーを追加してみます。
といっても、ユーザーの追加はすごく簡単な作業になります。
さきほどダウンロードした gitolite-admin というリポジトリのなかに、keydir というフォルダがありました。ここに追加するユーザーの公開鍵を追加してリポジトリを送信します。
1 2 3 4 5 | $ cd ~/tmp/gitolite-admin $ cp ~/takatomo.pub ~/tmp/gitolite-admin/keydir $ git add . $ git commit -m "Add User: takatomo" $ git push |
これだけの作業でユーザーを追加することができます。
リポジトリにファイルを追加する
test-repo というリポジトリを作ったのですが、test-repo は空のままでした。そこでこのリポジトリにファイルを追加してみましょう。リポジトリにファイルを追加する方法を2つ紹介します。
リポジトリをダウンロードしてファイルを追加する
まず1つめの方法は、追加したリポジトリをローカルに持ってきて、そこにファイルを追加する方法です。この方法は設定するものがないので、簡単にリポジトリを使いたいときにはおすすめです。
1 2 | $ cd ~/tmp $ git clone git-admin.example.com:test-repo |
~/tmp の中に test-repo というフォルダができるので、ここにファイルを追加するだけでおしまいです。
1 2 3 4 5 | $ cd test-repo $ touch readme.txt | echo "hogehoge" >> readme.txt $ git add . $ git commit -m "ADD: readme.txt $ git push origin master |
次は既存のフォルダをリポジトリとして使ってみます。
既存のフォルダをリポジトリとして使う
上の方法で test-repo に push した場合は新しくリポジトリをつくってください。
まずは既存のディレクトリとして ~/tmp/exist_folder があるとして、この中にあるファイルをリポジトリに追加してみましょう。一番上の行はreadme.txt ファイルが置いてある exist_folder を作っているだけです。
1 2 3 4 5 6 7 | $ mkdir ~/tmp/exist_folder; cd ~/tmp/exist_foler; touch readme.txt $ cd ~/tmp/exist_folder $ git init $ git remote add origin git-admin.example.com:test-repo $ git add . $ git commit -m "initialize commit" $ git push origin master |
コマンドだけ書いてしまったのですが、
- git init
- フォルダを Git で管理するように設定
- git remote add git-admin.example.com:test-repo
- リモートリポジトリとして、先ほど追加したリポジトリを設定
- git add .
- Git にフォルダ内の全てのファイルを追加
- git commit -m "initialize commit"
- ひとつのバージョンとして "initialize commit" というメッセージと一緒に登録
- git push origin master
- リモートリポジトリにマスターブランチを登録する
詳しい Git の使い方は機会があれば紹介したいと思いますが、これで Gitolite でつくったリポジトリにファイルを追加することができます。
後半は簡単にですが Git の使い方にも触れてみました。Gitolite を使うことで、Git だけで管理するよりも、簡単にリポジトリの管理ができるようになりました。最初の設定はすこしめんどくさいのですが、あとのことを考えると設定して損はしないと思います。
どんどんリポジトリをつくって、遊んでみてください。
Git の使い方。。。いつか紹介できるようになったらいいなぁ〜。
でわでわ、たかともでした。