gitoliteによるgitサーバ構築、および、使用方法 †目的は、グループによるアプリ開発ではなく、gitサーバを立てて、複数のPCでバージョン管理をやることです。具体的には、主に、自宅のデスクトップPCでアプリ開発をやっていて、gitでバージョン管理をやっているのですが、勉強会等で外出先でノートPCでソースをいじり、gitでバージョン管理をやって、デスクトップPCのリポジトリに反映させるにはどうすればいいかの考察です。方法として、自宅LANにgitoliteによりgitサーバを立てて、それぞれのPCでローカルにリポジトリを操作した上で、リモートリポジトリにpushして反映させます。もちろん、企業等でグループでアプリを開発していて、ソースコードをgitでバージョン管理していて、共有サーバにgitのリモートリポジトリを作ることも可能です。その場合、下記説明で、sshの鍵のファイル名にユーザ名とPC名を付けるといいでしょう。 gitサーバ(以下、serverA)のOSはLinux Debian Squeezeを想定。gitサーバを利用するクライアントPCをclientB、clinetCとする。clientBは、アプリ開発やgitによるバージョン管理も行いますが、gitサーバのユーザ管理をしたり、リモートリポジトリにプロジェクトを作成する管理用PCにもなります。 ※ ご注意: gitはEclipseのEGitを使って、ローカルでのバージョン管理、githubへのリポジトリのpushをやっていただけなので、素のgitコマンドの扱いには不慣れです。間違った記述もあるかもしれません。 0. なぜ、gitoliteか †お手軽にインストールできるものにGitosisがありましたが、現在開発が止まっており、実際に使おうとすると、サーバにgit pushできないなどの不具合があります。また、最近、Gitoriousが人気のようですが、インストール作業が大変です。debパッケージではないRuby enterprise、Sphinx、Apache ActiveMQとかのインストールが必要です。debパッケージでないものを入れるということは、システムのアップデートで動かなくなる可能性があるということであり、開発しているアプリのソースコードをそこに入れるのは不安です。gitoliteは、DebianのSqueezeで手軽にインストールできるので、このインストール方法、設定、使い方について考察します。 1. gitoliteのインストール †serverAで
2. 管理者用鍵作成 †clientBで
serverAの/tmpに公開鍵admin_clentB.pubをファイル転送して、
clientBは管理者用PCで、このPCでgitサーバにgit pushするPCおよびユーザの追加や、リモートリポジトリでのプロジェクトの作成を行います。 3. gitoliteの設定 †serverAで
4. sshでconfigの設定 †clientBで
hostはgitoliteサーバのホスト名、userはgitolite、hostnameはgitoliteサーバのIPアドレス、identityfileは管理者用秘密鍵のファイル名。 5. 管理者用リポジトリの取得 †clientBで
6. clientCにあるプログラムのソースコードをgitoliteサーバのリポジトリに置けるようにする †clientCで鍵生成
clientBの~/gitolite-admin/keydirディレクトリにclientCの公開鍵clientC.pubをファイル転送。 テストとして、リポジトリmyprojを作り、clientBとclientCからgitでリモートリポジトリを操作できるようにする。
を追加。
このとき、clientCの公開鍵もリモートリポジトリに格納される。 7. 使い方 †clientBで適当なディレクトリにプロジェクト作成。
初期化
何かファイル作成
コミット
リモートリポジトリの追加
push
8. clientCでリポジトリをcloneして、ソースをいじれて、リモートリポジトリを操作できるようにする †clientCで
identityfileのところだけ、clientBの設定を修正。 テストとして、myprojのcloneを取得
ソースをいじって、add、commit、push
9. Eclipseで利用する †EGitプラグインでローカルにリポジトリの管理はできますが、リモートリポジトリにgit pushするのはエラーが出て、うまくいかないことがあるようです。したがって、ローカルでのバージョン管理は、EGitを利用するか、gitコマンドでやり、リモートリポジトリにpushするときは、gitコマンドで行います。 Eclipseでプロジェクトを作り、ソースコードを編集して、ローカルでバージョン管理をします。リモートリポジトリにpushするときは、管理用PCでリポジトリsumeprojを作り、gitサーバにpushした上で、ソースコードを編集していたPCで、
とかとやります。 また、別のPCのEclipseに取り込むには、一度、適当なディレクトリで、
とやって、cloneを取得して、Eclipseでは、既存のプロジェクトをインポートする方法で、sumeprojの中のディレクトリを指定してインポートします。そのPCでソースコードをいじり、ローカルでバージョン管理をして、リポートリポジトリにpushするには、Eclipseのworkspaceのプロジェクトのディレクトリでgitコマンドでpushします。 10. ブランチを指定してダウンロードする †ブランチがいくつか作成されたリポジトリsomeprojのcloneを取得
全てのブランチを表示
リモートにremotes/origin/somebranchがあるとして、somebranchをローカルに作成
11. 参考url †http://www.atmarkit.co.jp/fjava/rensai4/devtool26/devtool26_1.html |