Ubuntu16.04にGitLabを入れる

Ubuntu 16.04にGitlabを入れていきたいと思います。

Gitlabのインストール

Gitlabのサイトに、OS毎のインストール方法が書いてありました。

$ sudo apt-get install curl openssh-server ca-certificates postfix
$ curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
$ sudo apt-get install gitlab-ce
$ sudo gitlab-ctl reconfigure

ポート開ける

80ポートを開けます。

$ sudo ufw allow 80

ポートの衝突を回避する

ブラウザで見てもデフォルトのnginxの画面になる。既にnginx入れているのですが、これとは別にnginxを入れてるみたいでポートが衝突してるらいし。
参考:Ubuntu 14.04 に GitLabをインストールした

上記サイトのとおり、衝突してた。/etc/gitlab/gitlab.rbの下記に、変更したいポートを入れたら出来た。あとは、ufwでポートを開ける必要がある。

nginx['listen_port'] = nil

ブラウザでアクセスしたらGitlabのログイン画面が表示された。パスワード変更してrootでログインできた。

gitユーザでssh接続できるようにする

$ sudo vi /etc/ssh/sshd_config

AllowUsersにgitを追加します。

$ sudo service ssh restart

sshのポートを変えている場合は、gitlab.rbの下記を修正します。

gitlab_rails['gitlab_shell_ssh_port'] = 変更したポート

あとは、ローカルでキーを作成して、gitlabに登録して、.ssh/configを下記のような感じで修正します。

Host hoge.com
        HostName hoge.com
        User git
        IdentityFile C:\Users\hoge\.ssh\hoge_rsa
        Port 12345

メール送信設定

今回はgmailを新たに登録して、設定してみました。gmail登録後に、安全性の低いアプリに許可というのを設定する必要があります。あとは、gitlab.rbを下記のように設定します。

 21  gitlab_rails['time_zone'] = 'Asia/Tokyo'
 22  gitlab_rails['gitlab_email_enabled'] = true
 23  gitlab_rails['gitlab_email_from'] = 'hoge@gmail.com'
 24  gitlab_rails['gitlab_email_display_name'] = 'Hoge'
 25  gitlab_rails['gitlab_email_reply_to'] = 'hoge@gmail.com'

332  gitlab_rails['smtp_enable'] = true
333  gitlab_rails['smtp_address'] = "smtp.gmail.com"
334  gitlab_rails['smtp_port'] = 587
335  gitlab_rails['smtp_user_name'] = "hoge@gmail.com"
336  gitlab_rails['smtp_password'] = "GmailのPASSWORD"
337  gitlab_rails['smtp_domain'] = "smtp.gmail.com"
338  gitlab_rails['smtp_authentication'] = "login"
339  gitlab_rails['smtp_enable_starttls_auto'] = true
340  gitlab_rails['smtp_tls'] = false
341  gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

reconfigure

$ sudo gitlab-ctl reconfigure

CentOS5.0にGitをyumでインストール

yum install gitだとインストールできません。

サーバタイプの確認

$ cat /etc/redhat-release
CentOS release 5.10 (Final)

$ getconf LONG_BIT
64

あと、下記コマンドでx86_64とかが確認できる。

$ cat /proc/version
$ uname -a

rpmforgeを選ぶ

http://pkgs.repoforge.org/rpmforge-release/から、自分のサーバ環境に合うものを確認します。

自分は、CentOS-5 x86 64bitなので、http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpmを選びました。

rpmforgeのインストール

$ wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm
$ sudo rpm -ivh rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm

初期設定が常時使用になっているので、都度使用に変更する

$ sudo sed -i 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo

yumでgitを検索

$ yum --enablerepo=rpmforge list | grep git

yumでgitをインストール

$ sudo yum -y --enablerepo=rpmforge install git

参考;
CentOS 5系にyumでgitをインストール
http://pkgs.repoforge.org/rpmforge-release/
yum install git でインストールできない場合 EPELリポジトリの追加

Gitリポジトリをgithubからcodebreakに移行する

Githubのリポジトリをローカルにクローンして、remote originのurlをcodebreakに変更して、pushします。(ローカルリポジトリに、リモートのブランチが全て存在しているか注意します。)

まずは、codebreakに新規リポジトリを作成します。

githubからクローンします。

$ git clone git@github.com:hoge/hoge.git .

ブランチを全てローカル上に落とします。

$ git fetch (リモートのブランチの最新状態を取得)
$ git branch -a (リモートのブランチも含めて表示)
$ git branch (ローカルのブランチを表示)
$ git branch master origin/master (masterがローカルにない場合、左記のようにしてコピー)

(※)下記で現在のremote originのURLが確認できます。

$ git remote -v

remote originのURLをcodebreakに変更します。

$ git remote set-url origin https://hoge@git.codebreak.com/hoge/hoge.git

codebreakのリポジトリにpushします。

$ git push origin master

参考:Gitのリポジトリを移行する

githubのアクセス可能なリポジトリを限定する

EC2サーバにデプロイしたい。Githubは沢山リポジトリがあるが、今回デプロイ対象になっているリポジトリのみEC2からアクセスできるようにしたい。

githubのdeploy keysに公開鍵を登録しておけば、リポジトリが限定できました。
capistranoでデプロイする為に、EC2で公開鍵を作成して、それをdeploy keysに登録しました。そして、~/.ssh/configで下記のように設定しました。これでデプロイができました。

Host github.com
    HostName        github.com
    IdentityFile    ~/.ssh/id_rsa_hogehoge
    User            ec2-user

capistrano3でさくらレンタルサーバにGItHubのリポジトリをデプロイする

さくらレンタルサーバは環境変数設定ができず、capistrano3のデフォルトでgitリポジトリをデプロイしようとすると、GIT_ASKPASSという環境変数を設定しようとしてエラーになります。なのでデフォルトの機能を使わずにやってみます。

やることは、デプロイするサーバにsshで入って、pull用のディレクトリに移動して、githubリポジトリをpullします。データベース設定ファイルなどを入れ替えて、tmpディレクトリ内の不要ファイルなどを削除します。最後にドキュメントルートディレクトリに、pull用ディレクトリのシンボリックリンクをはります。まあ、これだともはやpull用とドキュメントルートを分ける必要がないと思いますが、capistranoのデフォルトの仕組みをつくるのが今めんどくさいですし、あくまで開発サーバなのでいいことにします。

mkdir hoge
cd hoge
cap install
vim config/deploy.rb

デフォルトの内容を削除して、下記だけにします。

framework_tasks = [:starting, :started, :updating, :updated, :publishing, :published, :finishing, :finished]

framework_tasks.each do |t|
  Rake::Task["deploy:#{t}"].clear
end

Rake::Task[:deploy].clear

set :application, 'hoge'
set :repo_url, 'git@github.com:hoge/hoge.git'
set :log_level, :debug

vim config/deploy/staging.rb

set :user, "hoge"
set :pull_path, "/home/#{fetch :user}/cap/#{fetch :application}"
set :deploy_path, "/home/#{fetch :user}/www/#{fetch :application}"
server "hoge.com", user: fetch( :user), roles: %w{web}

set :ssh_options, {
  keys: %w(/hoge/.ssh/id_rsa),
  forward_agent: true,
}

task :git_pull do
  on roles(:web) do
      execute "cd #{fetch :pull_path}; git pull"
  end
end

task :deploy => :git_pull do
  on roles(:web) do
    execute "ln -sf #{fetch :pull_path} #{fetch :deploy_path}"
    execute "cp -f #{fetch :pull_path}/database.php #{fetch :pull_path}/app/Config/"
    execute "touch #{fetch :pull_path}/app/tmp/logs/empty; rm -rf #{fetch :pull_path}/app/tmp/logs/*"
    execute "touch #{fetch :pull_path}/app/tmp/cache/models/empty; rm -rf #{fetch :pull_path}/app/tmp/cache/models/*"
    execute "touch #{fetch :pull_path}/app/tmp/cache/persistent/empty; rm -rf #{fetch :pull_path}/app/tmp/cache/persistent/*"
  end
end

cap staging deploy

かなり色々な事前準備というか、特定の環境を前提にしたものでもあり、本番サーバとかだと絶対使えませんが、一応動きました。開発サーバにsshで入ってgit pullってやればいいことだし、githubのpushに連動もしてないので、これだけだとほぼ無意味かなと思いますが、capistrano3の使い方が大体分かってよかったです。

参考;入門 Capistrano 3 ~ 全ての手作業を生まれる前に消し去りたい超分かりやすかった。

githubのssh接続が速くなるらしい

githubでssh接続はhttp接続より遅い。
でもssh接続するとpushするときとか、パスワード入力等がいらなくなるのがメリットらしい。
すごいメリットだ。ssh接続も.ssh/configに以下を追記すると速くなるらしい。

Host github.com
  Compression yes
  Ciphers arcfour256

やってみたら、エラーがでた。

$ git pull
no matching cipher found: client arcfour256 server aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc
fatal: Could not read from remote repository.

Ciphersというのは暗号方式的なもののようで、githubではarcfour256っていうのは使えないってことのようだ。
下記のような感じで、速い順に書いておくといいらしい。まあ速いやつをしっかり選択しているのかは分からないけど、これでエラーはなくなった。

Host github.com
  Compression yes
  Ciphers arcfour128,arcfour256,arcfour,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc

参考:大容量ファイルのSCP転送を高速にする方法

なんかネットみると、arcfour256が昔は使えたけど、githubで使えなくなってconfigの設定を削除してる人が多いらしい。多分上記の記載は速度向上に貢献しないんだろう。

git – クローンしたリポジトリのサブモジュールをワークツリーに展開する

参考:クローンしたリポジトリのサブモジュールをワークツリーに展開する

サブモジュールを含むリポジトリをクローンしたとき、 サブモジュールのディレクトリは空になっている。

git submodule status
を見ると先頭が「-」になっていて、サブモジュールが初期化されていないことがわかる。

git submodule init
git submodule update
とすると、サブモジュールの初期化と更新が実行される。 サブモジュールのディレクトリを見ると、実際にファイルが保存されている。

厳選! cakePHP優良プラグイン53選!!

つかれた!大体上から人気ある順で並んでおります。
人気がちょっとあってもちょっと古いのは割と下にいます。


Croogo
cakePHPで作られた高機能なCMSらしい。これを全部組み込んだり一部組み込んだりするとブログとかすぐにつくれるかも
http://croogo.org/


CakeDC/utils
色々詰まってる便利なやつらしい。これにトラックバック実装するときのpingbackっていうのもありそうだな。つくんなきゃいけないから見てみよう。


CakeDC / migrations
これは良さげ。データベースいじった履歴とかデータベースの共有とかその辺をなんか便利にしてくれるっぽい。


CakeDC / search
これは多分有名なサーチプラグイン。でも使ったことない。サーチってそんな難しくないし。でもきっと便利にできてるんだろうから調べてみるのはいいかも。


CakeDC / users
これはUserの新規登録とかログインとかパスワード再発行とかのロジックが詰まったプラグインですね。もう俺俺プラグインがあるんだけど、コードを比較して改良するスタンスでソースコードを見てみるっていうのはいいかもな。


alkemann / CakePHP-Assets
説明がないもんで何か分からない。でも人気が結構ある。


webtechnick / CakePHP-FileUpload-Plugin
FileBinderみたいなやつ。FileBinderより利用者がかなり多そうだな。


webtechnick / CakePHP-Paypal-IPN-Plugin
Paypal Instant Payment Notification Plugin


yandod / candycane
candycaneってなんかよく聞くきがするけど知らない。でも人気ある。


silasmontgomery / CakePHP-Full-Calendar-Plugin
確かに便利そう。日本の祝祭日まで入ってると有り難いんだけどなあ。どこまでFull機能なのかを確認したい。


Grafikart / CakePHP-Media
これは素晴らしい。多分素晴らしい。ドラッグ&ドロップでアップロードできるし、フォームをHTMLエディタみたいにする機能もついてて、しかもそれがメディアアップロードと連動してくれるために、ブログの投稿画面がすぐに作成できる。画像の保存するディレクトリやファイル名なども調整が簡単にできる模様。リサイズもできるもよう。便利。
説明動画まであり至れり尽くせりすぎる。感謝ですねえ。インド人的な感じの人のようで、Mediaをメジャと発音してて面白い。


ProLoser / CakePHP-Cart
ショッピングカートのプラグイン。人気あるねえ。


robwilkerson / CakePHP-Audit-Log-Plugin
これは興味深い。だが詳細は意味不明。英語は難しい。
モデルにちょろっと設定するだけで、表示するフィールドとかを調整してくれるんだろうか?
何しろ自分で作りたいと思ってたやつっぽいので今度調べよう。


CakeDC/tags
これは有名なタグのプラグイン。でもつかったことない。使おう。


josegonzalez/cakephp-upload
これも人気あるなあ。こちらもファイルのアップロードプラグイン。
FileBinderに似てるっぽい。でもサムネイル画像とか何種類もサイズ指定しておけば、そのサイズで自動で作成してくれたりするようでFileBinderより便利かも。FileBinderも機能ついてるのかもしれないけど。


webtechnick / CakePHP-Seo-Plugin
SEO関連の設定を簡単にできるプラグインのようだ。これは調べて使ってみよう。


Datawalke / Coordino
Self-hosted Knowledge Software your question & answer system written on top of the CakePHP Framework http://coordino.com
ということであります。OKwebがcakePHPで出来ちゃっているということだろうか?今度見てみよう。


CakeDC / recaptcha
どうもhttp://www.google.com/recaptchaこういう読みにくい文字を読んで入力してログインするやつを作れるプラグインっぽい。すげー。


cakephp / cakephp-codesniffer
これはcakePHPの命名規則とかのルールに沿って作られてるかをチェックしてくれるプラグインみたいだな。


marcferna / CakePHP-GoogleMapHelper
これはGoogle Mapnヘルパーらしい。使うまでもないっちゃないけど、細かいとこまで融通きくのか分からないけど、試してみてもいいかも。


CakeDC / comments
簡単にコメント機能をつけられるプラグインみたいだな。そもそもコメントって超簡単につけられる気がするんだけど。驚く程少ないコードで実現できたりするかもしれないんで、今度調べてみようかな。


milesj / forum
何でもあるなあまじで。これはいわゆる掲示板みたいだな。今度調べてみよう。


luisdias / CakePHP-Report-Manager-Plugin
これはモデルというかテーブルの状態をレポートにしてくれるプラグインらしい。まあ痒いところに手が届くような集計方法とか、かっこいいグラフとかにしてくれる機能とかがあると有り難いけど、ちょっとしたものだとあんまり自分的には使わないかな。


gerhardsletten / Active-Admin-CakePHP
http://activeadmin.info/のcakePHP版って感じっぽい。
なんか管理画面のちょっとかっこよくてちょっと便利なやつって感じがする。


neilcrookes / CakePHP-Blog-Plugin
でました。ブログプラグイン。A CakePHP Plugin for a blogging engine with posts, categories and tags
http://www.neilcrookes.com
これがトラックバックと、WordPress並みの投稿画面の便利さがあればパーフェクトなんだだがどうかな??メディアアップロードとかも高機能であってほしい。


muxe / cakePHP-QR-Code-Helper
QRコードつくってくれるプラグイン


andraskende / cakephp-shopping-cart
すごくシンプルなショッピングカートのプラグイン


CakeDC / i18n
これは多言語化をサポートするプラグインで、http://hoge.com/ja/shopsとかにすると日本語にしてくれたりするっぽい。


phishy / acl_plugin
結構人気なACLのプラグイン。どう便利かは調べないとわからん。


nodesagency / CakePHP-Rest-Datasource
これはRestのエンドポイントを作成してくれるプラグインっぽい。


MSeven / cakephp_queue
これは異常に興味深い。GAEのタスクキューみたいなやつかな。あれ便利だったんだよな。


ceeram / CakePdf
PDFを作ったりできるプラグイン。僕は別のやつでやりましたが、これは人気がある。


thomseddon / cakephp-oauth-server
これはOauthのプラグイン。そのままPHPのライブラリつかえばいいんだけど、ちょっと便利かもしれない。


CakeDC / ratings
これは評価のプラグインだろう。こんなのもあるのか。便利な世の中ですね。まあ簡単なんだけど。


CakeDC / categories
これはカテゴリのプラグイン。大カテゴリ、中カテゴリ、小カテゴリとかTree状態になるようなものもすっきりとしたコードでつくれることでしょう。


jadb / capcake
Deploy CakePHP applications using Capistrano
http://github.com/jadb/capcake
Capistranoでデプロイできるプラグイン。なにかこれを使うメリットがあるのかいまいちわからない。


uzyn / cakephp-opauth
これはopauthというのを知りませんでしたが、かなり色んなサービスでの認証を簡単に実現してくれるサービスらしい。それのcakePHP用プラグイン。
参考:CakePHPでOpauthを使ってFacebook認証


CakeDC / favorites
出たお気に入りのプラグインまであるんか。まあでもどうせ実装するならこういうやつを使っておいた方が、誰かとコードを共有するときはいいかも。有名なプラグインというのは共通言語といえますからね。


ProLoser/CakePHP-CSV
これはCSVを色々できるプラグイン。そこまで人気ではないのかも。


milesj / utility
これは色んな物が詰まったプラグイン。http://milesj.me/code/cakephp/utilityスパム保護とか、Feedつくるやつとか、SiteMapをつくるやつとか、自動ログイン?とか、パン屑とか、モデルのバリデーションタイプを複数にできるやつとか。


uzyn / cakephp-composer
これはcomposetをcakePHPで使えるようにしたプラグインみたい。compser使ったことないから今度使ってみようかな。
参考:PHPの外部ライブラリの管理にComposerを使う


paulredmond / chosen-cakephp
これはセレクトボクスの表示調整や、テキストフィールドにフォーカスしたら自動で候補をだして、選択したらワードプレスのタグを選択したときみたいにグラフィカルにしてくれたりするプラグイン。
http://paul.goredmonster.com/chosen-cakephp/
http://harvesthq.github.io/chosen/


hiromi2424/TransitionComponent
これは俺もたまに使っていてスッキリする(コードが)ので結構すき。
入力フォームで、確認画面表示後に登録完了するようなときにセッションにフォーム情報を自動で登録してくれて、ページ遷移が正しいかとかも自動でチェックしてくれる。しかもコードを書く量が減る。という結構便利なプラグイン。


fusic / filebinder
ようやく登場しました。我らがFileBinderであります。僕は最初にFileBinder使ったので今までずっとFileBinder使ってます。
今度別のも使ってみよう。でも十分便利。リサイズとか上に出てくるアップローダの方が高機能だけど、分かりやすいし結構すき。まあ他の使ったこと無いけど。


robmcvey / cakephp-paypal
CakePHP 2.0 plugin for PayPal Website Payment Pro
おこれよさそうだね。


shama / cakeftp
これはcakePHPでFTP接続できるプラグイン


felixge / cakephp-authsome
Authコンポーネントが嫌いな人向けのAuthプラグインです。って書いてあるのだろうか。
まあ標準のAuthコンポーネントの改良版ということだろう。どこがすごくいいのかは調べてみようかな。


fusic / maintenance
メンテナンス中画面に簡単にしてくれるプラグインの模様。いいねえ。


innovativepm / cakephp-newsletter-plugin
ニュースレターのプラグイン。よく見てない。メルマガみたいなやつ?


kamisama / Cake-Resque
これもjob que系のやつ。調べよう。


destinydriven / cakephp-high-charts-plugin
かっちょいいグラフ、アニメーション付きグラフをつくってくれるプラグイン
デモ -> http://destinydrivenlive.com/highcharts/high_charts/high_charts_demo


mcurry / chat
チャット埋め込みプラグイン


segy / PhpExcel
エクセル読んだり作ったりできるプラグイン


nanapi / cake-storm
おおこれの存在をちょっと忘れていた。使い方がわからなかったもんで。詳しく説明書いてくれてるみたいだから、確認してちゃんと使ってみよう。すごい便利そうなんだよな。phpstormにした理由の一つともいえる。

さくらサーバにgitをインストールする

https://code.google.com/p/git-core/downloads/list

ここから最新版をローカルに落として、サクラサーバにSCPでコピーします。

ここに書いてある通りにインストルします。

$ tar xvfz git-1.9.0.tar.gz
$ cd git-1.9.0
$ ./configure --enable-pthreads=-pthread --prefix=$HOME/local
$ gmake all install

インストールまで出来たら、パスをとおします。

/home/hogehoge/.cshrcを編集します。
下記のset pathというところの最後に、$HOME/local/binを追加します。

set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin $HOME/local/bin)

そして、下記をやるとcshrcの再読み込みになるようです。

$ source .cshrc

これでgitと打つとgitがでてきます。

githubにpushするとcapistranoと連動して自動デプロイする

githubにはPost-Receive Hooksという機能があり、これはpushされると、登録したurlにpostアクセスし、json形式でpushしたデータの内容を渡してくれる。なので、このgithubからのpostアクセスを受け付けて、pushデータ内容に応じて、capistranoのサーバにアクセスしcapistranoでデプロイをするようにすれば、pushからの自動デプロイが可能になる。

PHPでGitHubからのpostアクセスの受けをつくる

今回はcapistranoと同じサーバにGitHubのpostアクセスの受けをつくった。ちなみにさくらのvpsサーバ。
apacheの設定をしてgithubから受けられるようにする。受けのphpは下記のような感じにした。

<?php
if(! isset($_POST['payload'])) die();

$payload = json_decode($_POST['payload']);
if(! (isset($payload->repository->url) && $payload->repository->url == 'https://github.com/hogehoge')){
    die();
}

chdir('../cap/hoge');
shell_exec('cap dev deploy');

githubから来てるものに限定するとかするともっとよい。あと、ブランチに応じて、開発サーバデプロイと、本番サーバデプロイを分けるとかできる。まあでも本番デプロイは手動でもいいか。さくらvpsだとapacheのドキュメントルートは/var/www/htmlでして、そこに上記phpファイルを置いております。chdirはつまり/var/www/cap/hogeに移動しており、hoge上にcapistranoフォルダを作っており、そこでcap dev deployをしております。githubのpostアクセスを受けているのはapacheですので、cap dev deployしているのもapacheになります。なので、apache君のssh pubkeyを作ったりしました。あとデプロイサーバのssh pubkeyもgithubに登録しました。僕のcapistranoはどこかで調べてconfig/deploy.rb以外に、config/deploy/dev.rbというのもありますので、それぞれ下記のような内容にしました。ちなみにデプロイサーバもサクラのレンタルサーバです。

config/deploy.rb

require "capistrano/ext/multistage"
require "capistrano_colors"
require "railsless-deploy"
require "rubygems"

ssh_options[:forward_agent] = false
set :normalize_asset_timestamps, false
set :use_sudo, false
default_run_options[:pty]   = true

#ステージ
set :stages, ["dev", "pro"]
set :default_stage, "dev"
# バージョン管理
set :scm, :git
set :scm_passphrase, "hogehogehoge"
# リポジトリ
set :repository, "git@github.com:hogeo/hoge.git"
# ブランチ
set :branch, "dev"
# デプロイ方式
#set :deploy_via, :remote_cache
#世代管理
set :keep_releases, 1 

# デプロイ対象外ファイル
set :copy_exclude, [".git", ".gitignore"]

config/deploy/dev.rb

# アプリケーション名
set :application, "hoge"
# デプロイ先ディレクトリ
set :deploy_to, "/home/hogeo/www/#{application}"

# デプロイサーバー
role :web, "hogeo@hogeo.sakura.ne.jp"
role :app, "hogeo@hogeo.sakura.ne.jp"

#ユーザアカウント
set:user, "hogeo"
set:password, "hogehogehoge"

set :scm_passphrase, "hogehoge"

namespace :deploy do
  before "deploy" do
    try_sudo "chown -R hogeo:users #{deploy_to}"
  end
end

after "deploy", "upload_config"

desc "各種セットアップ情報をアップロードします"
task :upload_config, roles => :web do
 run "cp -f /home/hogeo/www/hoge/database.php #{latest_release}/app/Config/."
 run "chmod -R 755 #{deploy_to}/current/"
 run "rm -rf #{latest_release}/app/tmp/cache/persistent/*"
 run "rm -rf #{latest_release}/app/tmp/cache/models/*"
 run "rm -rf #{latest_release}/app/tmp/logs/*"
end

参考
Webサイトをgithubで管理してpush時に自動的に同期する方法
GitHubとJenkins連動 自動デプロイ 開発環境設定編
githubにPushしたらwebhooksとSinatraを利用してサイトを自動的に更新する
GithubにあるプライベートリポジトリをCapistranoでデプロイ

git

subversionのような省略ワードはエイリアス設定すれば自分でつくれるようだ。

エイリアス設定
git config –global alias.st status
※–globalは個別リポジトリに限定しない全体的な設定
※configの場所は、.git/configにある。テキストファイル。

リポジトリつくる
git init

リポジトリにファイルを追加する
※addしてもaddしたときの内容がインデックスに反映されるだけらしい。
※add後に修正したらもう一回addしないといけない。
git add file

状態みる
git status

作業者の設定
git config –global user.name ‘名前’
git config –global user.email ‘Eメール’

コミット
git commit -m ‘コメント’ –author=’doraemon
※addもあわせて行う場合は、git commit -aとやる。こうすると作業ディレクトリの内容をインデックスに反映してからコミットするらしい。Untrakingファイルは-aとやっても勝ってに追加はされない。

エディターを設定する
export GIT_EDITOR=vim ※bashの場合

コミットログをみる
git log

コミットをみる
git show コミットID ※IDなしの場合は最新を表示

コミットの差分をみる
git diff コミットID コミットID

ファイルの削除
git rm ファイル名 ※システムからファイルが消える

ファイル名変更
git mv ファイル名 ファイル名 ※システムのフィアル名も変わる

リポジトリのコピーをつくる
git clone パス パス

コミットのグラフを表示する
gitk
※なんとWishとかいうGUIな画面が表示された。

二分探索で悪いコミットを探す
git bisect

ファイルの各行の最後にコミットした人とコミットIDを得る
git blame ファイル

ブランチをつくる
git branch ブランチ名 ベースのコミット
※ベースのコミットIDがない場合は、カレントブランチの最新コミットを使う
※コミットの代わりにブランチ名でもよい

ブランチの一覧を表示する
git branch

ブランチの詳細表示
git show-branch

ブランチを切り替える
git checkout ブランチ
※インデックスにコミット前の変更がある状態で、ブランチを切り替えても競合しなければエラーなく切り替わり、インデックスの変更内容は引き継がれる。

ブランチをつくって、その場で切り替える
git checkout -b ブランチ名 ベースのコミット

ブランチを削除する
git branch -d ブランチ名
※カレントブランチは削除できない
※カレントブランチにマージしていないブランチを削除はできない(削除するには-dではなく-Dにする)

マージする
git merge ブランチ名

競合を調査する1
git diff
※競合している箇所を表示する

競合を調査する2
git log –merge -left-right -p

mergeのリセット
git reset –hard HEAD ※mergeのコミット前に実施

bareリポジトリをクローンする
git clone –bare hoge hoge.git

originリモートを追加する
git remote add origin 場所

リモートを削除する
git remote rm リモート

pushする
git push origin

pullする
git pull

アップデートする
git remote update

おまけ(よさげなエイリアスを考えてみる)
status -> st
commit -> ci
commit -a -> ca
diff -> df
branch -> br
merge -> mg
checkout ->chk
とかかなー?

macへのgitのインストール

Xcodeをインストールして、
Xcodeのコマンドラインツールをインストールして、
MacPortsをインストールして、
gitをターミナル上でインストールする。

下記のとおりにやったら出来た。
http://arpanet617.blog.fc2.com/blog-entry-28.html

ちなみに、mac osx 10.8.3