rsyncをGit for Windowsに混ぜる

Windowsでrsyncをインストールする方法はいくつかあって、一番簡単なのはmingw-getでパッケージとして導入する方法。またはrsyncは諦めてChococaltely経由でcwRsyncパッケージをインストールするのが簡単。両者ともrsyncのためだけに入れるには大仰なので、既に導入されているGit for WindowsにMinGWパッケージと手作業で混ぜてインストールするのも悪くない。

必要な物は以下の4つの実行ファイルとDLLファイル。

それぞれのLZMAアーカイブには必要になる実行ファイルかDLLファイルだけしか含まれていないので、7-Zipなどで展開してGit for Windowsのbinフォルダー、つまりmsys-1.0.dllがあるフォルダーにすべてコピーするだけで良い。コピーしたらGit Bashを開いて以下のようにちゃんと実行できるか確認してインストールは完了。

$ rsync --version
rsync  version 3.0.8  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    32-bit files, 32-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, no IPv6, batchfiles, inplace,
    append, ACLs, no xattrs, iconv, no symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

アンインストールは上記ファイルを削除するだけ。あんまり混ぜるの良くない感じするけど、最近のMinGWパッケージ群はコンフリクトしづらいようにできているので、多分大丈夫。ちゃんと何をコピーして混ぜたかをメモしておくくらい。


Grunt経由でrsyncするプラグインはいくつかあったけど、なんかイマイチだったので自分ででっち上げたものを使っている。デフォルトでは-nでDRY RUNで動く安心設計。

Download: grunt-rsync.js

srcを解釈して特定のパス以下をdestにミラーみたいな使い方はできないようにしているので、常にGruntのルートをoptions.remoteで指定した先にミラーする。デフォルトのCLIオプションは-aC --exculude-from=.rsyncignoreとしてあるので、無視ファイルは-Cにより有効になるマスク群とグローバルな.cvsignore、最後にGruntのルートにある.rsyncignoreを組み合わせて指定する。

rsync: {
  options: {
    remote: 'user@example.com:~/Sites/example.com/'
  },

  main: {
    dry_run: false,
    sync: true,
    progress: true
  }
}

syncオプションを有効にすると--deleteが追加され同期モードに、progressオプションを有効にすると--progressが追加され転送の詳細が確認できるように、それぞれなる。上述の通りデフォルトはDRY RUNなので、明示的にdry_runオプションを無効にする必要がある。stdio: inheritspawn()するので、実行結果はGruntの出力と混ざる形で表示される。