gemにmoneky patch当てないでcloneしてgem 'foo', :git => 'git://foo'しようというのをどっかでみたけどslim-railsで

Deprecated: Use `require 'slim'` instead of `require 'slim/rails'`

が出るのは放置してたらcloneしてる人がいた。pull requestが送られてから2週間たってるけどマージされる気配が無いのでcloneした方を使う。

# Gemfile:
gem 'slim-rails', :git => 'git://github.com/stjernstrom/slim-rails.git'

もっと面倒なのかと思ってたけど簡単。さっさと自分でやればよかったな。

Kaleidoscopeをgitで使うデモ。

元ファイルを修正すると即座に反映されるのがちょっと便利。

Terminal — less — 80×24

origin = github。

% git branch -r
  heroku/master
  origin/HEAD -> origin/master
  origin/admin-notice
  origin/draft
  origin/master
  origin/pyha-last

モートブランチが表示される。

% git checkout -b draft origin/draft

リモートブランチのdraftをローカルブランチdraftとして持ってくる。

% git branch
  draft
* master

一方、こっちのやり方は駄目!ってのをみたんだけど、なんでだかは知らない。

$ git checkout -b draft
$ git pull origin draft

@dandasoに何故gitを使うのか、svnから移行するコストを払うに見合う嬉しさは何なのか聞かれた。

gitを使いこなしてる方々に取っては噴飯ものの解答だと思うが、俺はこう答えた。

「殆どのトラブルはcommit時に起こる。svnは1ステップで全員共通のリポジトリにcommitされるのでmergeやcommitは怖いが、gitはcommitした後にpushしないと他人に影響が出ない。だから気軽にcommitしたりmerge出来る。その違いが嬉しい。」

Lokkaのpluginを別リポジトリにするためにgit filter-branch --subdirectory-filterを使ってみました。

Pro Git - Pro Git 6.4 Git のさまざまなツール 歴史の書き換え

最強のオプション: filter-branch

歴史を書き換える方法がもうひとつあります。これは、大量のコミットの書き換えを機械的に行いたい場合 (メールアドレスを一括変更したりすべてのコミットからあるファイルを削除したりなど) に使うものです。そのためのコマンドが filter-branch です。

% git clone git@github.com:komagata/lokka.git
% cd lokka
% git filter-branch -f --subdirectory-filter public/plugin/lokka-hoptoad HEAD
Rewrite cedd2bc6856876f6a51cfbf2cf70f3ceb2b835a9 (1/1)
Ref 'refs/heads/master' was rewritten
% git st
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 247 different commit(s) each, respectively.
#
nothing to commit (working directory clean)
% git log
commit 34ad15f4435ccc563f48778419fe2d48d7c58161
Author: Masaki KOMAGATA <komagata@gmail.com>
Date: Thu Dec 2 17:26:34 2010 +0900

added hoptoad plugin.
% ls
Gemfile lib views

「やだ、なにこれ・・・」

スゲー変わってる。filter-branch系は歴史を遡って書き換えちゃう系なので新たにcloneしといた方がホント安全っぽいですね。

後はgithubに新たに作ったlokka-hoptoadリポジトリにpushして完了。便利ですね!