gitのリモートリポジトリ作成メモ 

エンジニアの@ojimacです。

あいさつ投稿だけでは寂しいので、早速技術的な投稿をしていきます!
初回はgitについてです!
スパーク・ラボでは、バージョン管理をgitに移行中で、新規プロジェクトについてはgitでバージョン管理をするようにしているところです。

今回は、とあるサービスの本番環境を作成するにあたって、本番サーバにリモートリポジトリを作成して、開発環境からアクセス(clone, pushができる状態)できる環境を作成したので、備忘録がてらここにまとめておこうと思います。

前提条件

OSやシェルの種類、gitのバージョンによって異なる部分があると思いますので記載しておきます。
- OS: CentOS5.5
- シェル: bash
- git: 1.7.3

gitのインストール

1. まず、git自体が入っていなかったのでインストールします。yumで一発です!

sudo yum install git

gitの環境変数の設定

1. 次にgitのcommit時に使われるユーザー名とメールアドレスを設定しておきます。

git config --global user.name "spark"
git config --global user.email hogehoge@spark-lab.com

2. git関連の出力を色つきにします。

git config --global color.ui true

bashの設定

1. シェル上でgitコマンドの補完が効くようにします。オプション関係がタブで補完できるので便利です
1.1. まず、定義ファイルをコピーしてきます。

cp /etc/bash_completion.d/git ~/.git-completion.bash

1.2. ~/.bashrcに以下を追加します

if [ -f ~/.git-completion.bash ]; then
        . ~/.git-completion.bash
fi

2. gitではブランチを頻繁に行き来するので、今どのブランチにいるのか分かると効率的に作業が進められます。~/.bashrcのプロンプト設定行の最後に以下を追加します。

(__git_ps1 "(%s)")

例として、弊社の環境を記載しておきます。

変更前

PS1='\033[35m[\w]\n\033[33m\u@\h$\033[0m$ '

変更後

PS1='\033[35m[\w]\n\033[33m\u@\h$\033[0m$(__git_ps1 "(%s)") '

ここまでで、ひとまず環境周りは整ったので、gitのリポジトリ作成に入っていきます。

gitリポジトリを作る

今回は以下のような構成のサーバーで環境を作りました。
※サーバー名はダミーです。

開発用として
ホスト名: dev-server
開発用ソースが置いてあるパス: /home/spark/cake/dev-server.com

本番は
ホスト名: production-server
本番環境で動くソースを置くパス :/home/spark/cake/production-server

のようにします。なお、開発サーバ -> 本番サーバへはssh公開鍵にてログインできるようにしています。

※本番環境にて作業します

1. gitリポジトリ格納用のディレクトリを作ります。

[~/cake/production-server]
production-server$ mkdir repo.git
[~/cake/production-server]
production-server$ cd repo.git/

2. 共有リポジトリを作ります。ふつうのgit cloneでできるリポジトリと何が違うのかと言うと、–bareで作ったリポジトリは作業ファイルがなく、他のリポジトリからcloneされたり、pushされる対象になります。ここで作ったリポジトリを開発側でcloneして、がしがし開発した後にローカルでcommit後にpushする流れになります。

[~/cake/production-server/repo.git]
production-server$ git --bare init --shared

すると、以下のようなメッセージが出力され、gitのリポジトリが作成されます。

-> Initialized empty shared Git repository in /home/spark/cake/production-server/repo.git/

※原則、repo.git以下のファイルはいじらない方が良いと思います。

※開発環境で作業します

今回は、サービスの開発は別のメンバーが行っていて、僕がgitリポジトリの構築をするという作業分担だったので、開発が少し進んでいるプロジェクトをバージョン管理対象にするという状況でした。
ですので、プログラムを書き始める前にgitのリポジトリを作成する場合は、このセクションの1. 、2.の作業は不要です。

少し補足

今回バージョン管理をするプロジェクトの開発はCakePHPで行っており、appディレクトリ以下をバージョン管理の対象とします。

1. ミスった時のためにバックアップを取っておきます

[~/cake]
dev-server$ cp -r dev-server/ dev-server.org

2. リポジトリをappディレクトリとしてcloneしたいのですが、既にappディレクトリがあるのでリネームしておきます。

[~/cake/dev-server]
dev-server$ mv app app.org

3. 本番サーバ
の共有リポジトリからcloneしてきます

[~/cake/dev-server]
spark@dev-server$ git clone production-server:/home/spark/cake/production-server/repo app

4. Cakeのappディレクトリ以下にもバージョン管理したくないファイル(設定ファイル、定数が書いてあるファイルなど環境依存があるファイル等です)があるので、無視リストを先にcommitしておきます。
4.1. .gitignoreファイルを作ります

[~/cake/dev-server/app]
dev-server$ touch .gitignore

4.2. .gitignoreに以下の内容を書きます
※コメント(//以下は実際には書いてません)

.DS_Store // Macで勝手にできるファイル
*.orig // 一時的に残しておきたいファイル
tmp/ // CakePHPのキャッシュ、ログなど
config/database.php // データベースの設定ファイル
config/core.php // 定数ファイル
config/bootstrap.php // 定数ファイル
webroot/.htaccess // 開発環境ではアクセス制限をかけたりしているので
webroot/img/ // アップロードした画像等を入れておくのに使ったりします
plugins/debug_kit // debug_kitは既存ライブラリなのでバージョン管理しません

5. .gitignoreをローカルリポジトリに追加します

[~/cake/dev-server/app]
dev-server$(master) git add .gitignore

6. .gitignoreをコミットします

[~/cake/dev-server/app]
dev-server$(master) git commit -m 'initial commit'

7. リモートリポジトリにpushします

[~/cake/dev-server/app]
dev-server$(master) git push origin master

8. 元のapp以下をapp.orgよりコピーしてきます

[~/cake/dev-server/app]
dev-server$(master) cp -r app.org/* app/

9. ドットファイル(.htaccess)がコピーされてなかったので個別にコピーします…

[~/cake/dev-server/app]
dev-server$(master) cp ../app.org/.htaccess .

10. app以下を追加してローカルリポジトリにcommitします。

[~/cake/dev-server/app]
dev-server$(master) git add .

11. リモートリポジトリにpushします

[~/cake/dev-server/app]
dev-server$(master) git push

12. Cakeのバージョンを合わせるため、app以外をscpにて開発環境から本番サーバにコピーします。

[~/cake/dev-server]
dev-server$ scp -r README cake/ index.php plugins/ vendors/ .gitignore .htaccess production-server:/home/spark/cake/production-server/

* ここから本番環境で作業します

1. 共有リポジトリから本番環境に置くファイルをcloneしてきます

[~/cake/production-server]
production-server$ git clone repo app

これでproduction-server/app以下にgitで管理しているプログラムが配置されました。
本番環境で開発環境からpushしたプログラムを適用するには、

[~/cake/production-server/app]
production-server$ git pull

とすれば良いです。複数台構成になるとデプロイツールを使うという選択肢もあるかと思いますが、今回のプロジェクトは1台のみなので今のところはこのような運用方法にしています。

gitについては、自分自身もまだまだ知らないことが多いので、「ここはこうした方がよいんじゃない?」とか、「ここはこうすると効率的」とかありましたら、コメント欄とかはてブコメント等で指摘頂けるとうれしいです。

参考にしたURL
Cygwin の git で自動補完(git-completion)を使う方法(+ おまけ)
Pro Git[Git の設定]

参考にした本

入門Git
入門Git
posted with amazlet at 11.01.20
濱野 純(Junio C Hamano)
秀和システム
売り上げランキング: 96354

One Response to gitのリモートリポジトリ作成メモ

  1. [...] This post was mentioned on Twitter by Jun Haranaga. Jun Haranaga said: RT @spark_lab: gitのリモートリポジトリ作成メモ http://tech.spark-lab.com/2011/01/19/make-git-remote-repos/ #sparklab [...]