redmineをいじってるうちに、ローカルで動かすGitのリポジトリビューアが欲しくなった。
一応gitにGUIはついているものの、MacでXを立ち上げるのも億劫だし見た目もよろしくない。
まぁ、実際のコミットだのなんだのといった作業はコマンドラインで十分なので、差分だけぱっと見て分かれば良い。そんなのないかなぁと思って探したら、GitXがなかなか見やすくて良かった。
似たようなのがLinuxにもないかな…と思ってaptitude search gitしてみたら、gtkアプリのgitgというのがほぼそのまんまだった。アイコンまでそっくり。どっちがオリジナルなのか…gitgの方にGitX likeとか書いてあるからGitXが先か。まぁ何でもいいけど。

たまにしか使わないのでよく忘れるコト。

作業ディレクトリをリポジトリ化する

cd /path/to/project
git init

空のリポジトリを作成する

mkdir project
cd project
git init --bare

ローカルリポジトリをリモートにコピー
(リモートに空のリポジトリを作成してから)

cd project
git remote add origin ssh://remotehost/path/to/project
git push origin master

特定のリビジョンのファイル内容を表示
(リビジョンはgit logで出てくる0c533178483e07649ec91462c97c0fe8889fa80aみたいな文字列)

git show 0c533178483e07649ec91462c97c0fe8889fa80a:config/deploy.rb

More »

redmineのデフォルト.gitignore
参考になるのでメモ。

/config/additional_environment.rb
/config/database.yml
/config/email.yml
/config/initializers/session_store.rb
/coverage
/db/*.db
/db/*.sqlite3
/db/schema.rb
/files/*
/log/*.log*
/log/mongrel_debug
/public/dispatch.*
/public/plugin_assets
/tmp/*
/tmp/cache/*
/tmp/sessions/*
/tmp/sockets/*
/tmp/test/*
/vendor/rails
*.rbc

database.ymlはリポジトリに含めた方がいい気もするけどね。

いつも忘れて調べるので備忘録。主にブランチまわり。

ブランチを作成する

git branch new_branch

ブランチを切り替える

git checkout new_branch

new_branchブランチをmasterにマージ

git checkout master
git merge new_branch

リモートにpushしたらrefuseされた時(リモートで)

git config --add receive.denyCurrentBranch ignore

特定ファイルを一つ前に戻す

git checkout HEAD^ path/to/file

おまけ。
capistranoから本番環境のサーバを停止・起動・再起動

cap deploy:[stop|start|restart]
20. 4月 2010 · Write a comment · Categories: Git

gitのブランチでちょっとハマった。
% git checkout -b ng
でブランチを切ってコミットして
% git push origin ng
でリモートに投げる。ここまでは良かった。
んで他のマシンに移って
% git pull origin ng
したらmasterにmergeされてしまった!がーん。

他のリポジトリにブランチとして取り込むには、いったん
% git checkout -b ng
してからpullすれば上手くいくんだけど、いちいちローカルでも同じ操作するって変じゃないか?
なんか勘違いしてそうだなぁ。ううむ。
ちなみにmergeする前に戻すには、git logでハッシュタグを調べてから
% git reset –hard [ハッシュタグ]
でおk。
% git checkout HEAD^
でもいいか。(戻すバージョンの数だけ^をつける)

rebaseとかgitらしい機能は全然使いこなせてないです。

24. 3月 2010 · Write a comment · Categories: Git

gitのリモートリポジトリがおかしくなったので仕切り直し。
ディレクトリ切ってそこに移動して
% git init –bare
でもって作業側で
% git remote add origin ssh://xxx.com/src/product
% git push origin master
これだとリモートにはリポジトリしかないから、cloneするまでファイルは見れないんだけどね。

<%= javascript_include_tag(:all, :cache => true) %> 

としてあると、
config.action_controller.perform_caching = false の状態では表示がおかしくなる。
(lightboxのモーダルウィンドウが出っぱなしになる)
どうにも原因不明なので、諦めてdevelopment環境でもキャッシュを有効にして作業してたんだが、viewをいじったりするたびにいちいちキャッシュを削除するのが激しくめんどくさいのできちんと調べてみた。

めんどいのでいきなり結論。
:cache => trueだとall.js(デフォルト)というJavaScriptを一つにまとめたファイルが生成されるんだけど、これが残ったままキャッシュを無効にするとall.jsまで読み込もうとしておかしくなる。
キャッシュまわりの開発のため一時的に有効にした時に生成されていた(そしてそのままgitリポジトリに取り込まれていた)のが残ってたらしい。
まぁ、考えたら当たり前なんだけど…
.gitignoreに加えておこう。
ついでに教訓。git commit -aする時はよーく考えてからにしよう…