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
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]
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らしい機能は全然使いこなせてないです。
<%= 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する時はよーく考えてからにしよう…