SourceTree でハードリセットするときの警告メッセージが怖い

SourceTree で HEAD のポインタをハードリセットモード(全ての作業コピーの変更内容を破棄)で移動しようとしたらこんなダイアログが出た。

警告:破壊的な操作 ハードリセットモードでは、作業コピーとインデックスにあるローカルの変更を全て破壊します。何が起きるか分かっていますね?

「警告:破壊的な操作 ハードリセットモードでは、作業コピーとインデックスにあるローカルの変更を全て破壊します。何が起きるか分かっていますね?

恐ろしい・・・。俺はついに OK を押すことが出来ずに git reset –hard した。

DBテーブルの差分を出力するMySQL::diffをインストールする

二つの MySQL データベースを比較し差分 ALTER SQL 文を出力してくれる perl 製ツール、MySQL::diffのインストール方法です。

このツールは、稼働中のデータベースのテーブルスキーマを最新に更新する場合など使えます。

Usage: mysqldiff [ options ] <database1> <database2>

今回はサーバデプロイ時のスキーマ更新作業を自動化するためにインストールしてみました。上手く使うと DDL のスマートなバージョン管理に一役買ってくれると思います。

コマンドラインツールなので GUI で分かりやすく差分を出力したい場合には不向きです。そういった場合はこのツールよりも MySQLWorkbench を使ったほうが便利でしょう。

MySQL::diff のインストール

MySQL::diff は mysqldiff – search.cpan.org で公開されています。

インストール先を /usr/local/mysqldiff にしました。

wget http://search.cpan.org/CPAN/authors/id/A/AS/ASPIERS/MySQL-Diff-0.43.tar.gz
tar xzvf MySQL-Diff-0.43.tar.gz
mv MySQL-Diff-0.43 /usr/local/mysqldiff

/usr/local/bin/mysqldiff にシンボリックリンクをはります。

ln -s /usr/local/mysqldiff/bin/mysqldiff /usr/local/bin/mysqldiff

これでインストール完了と言いたいところなのですが、このままだとパスが通っておらず以下のエラーが起こります。

Can't locate MySQL/Diff.pm in @INC (@INC contains: /usr/local/mysqldiff/bin /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/local/bin/mysqldiff line 112.
BEGIN failed--compilation aborted at /usr/local/bin/mysqldiff line 112.

このエラーを修正するために、ソースコードの冒頭に use lib 文を一行追記します。

vi /usr/local/mysqldiff/bin/mysqldiff
#!/usr/bin/perl -w
use lib '/usr/local/mysqldiff/lib';

=head1 NAME

また、CentOS の場合では CPAN で File::Slurp をインストールする必要がありました。

cpan
cpan > install File::Slurp

mysqldiff コマンドを空打ちしてみて、usage が表示されれば無事にインストール完了です。

Gitのブランチ削除方法あれこれ

ブランチの削除関連の git コマンドをまとめました。
ローカルブランチの削除とリモートブランチの削除は別なので注意します。

リモートブランチの削除

topic という名前のブランチを削除する場合のコマンドです。

git push --delete origin topic

以下の様なコマンドでも同様に削除可能です。

git push origin :topic

ローカルブランチの削除

リモートブランチを削除してもローカルにダウンロードしたブランチは残ったままです。それを削除するコマンドは以下になります。

git branch -rd remotes/origin/topic

単純にローカルブランチを削除するなら以下でOKです。

# 未マージのコミットがあれば警告
git branch -d topic

# 未マージのコミットがあっても強制削除
git branch -D topic

リモートから削除された追跡ローカルブランチを全て削除する

fetch や pull をする際に –prune オプションをつけると自動的に削除してくれます。便利。

fetch --prune origin