あなたは沢山のバージョン管理用リポジトリを持っています。
時にはそれらを一度に update したくなる事もあるでしょう。
あるいはローカルでそれらに行った変更をまとめて push したくなる事も。
ワークフローに合わせるために、いくつかのリポジトリ用に定型のコマンドラインを打っていませんか。
Myrepos は、どのバージョン管理リポジトリの管理にも使える便利な mr
コマンドを提供します。
使い始めてみるには
始めるにあたって必要なのは、既存のリポジトリがいくつかチェックアウトしてある事だけです。
git, bzr, mercurial, darcs あるいはそのほか数あるバージョン管理システムのどれであっても構いません。
本当に気にしなくていいのです。全てをサポートしていますから。
それぞれのリポジトリの中で mr register
コマンドを走らせてください。
これによって ~/.mrconfig
ファイルの中にリポジトリが追加されていきます。
さて、これで mr update
を実行する準備ができました。
ホームディレクトリでコマンドを走らせると、myrepos に登録した各リポジトリを一度に
update することができます。
もっと速くするため、並列に実行したいですか?
mr -j5 update
のようにすれば 5つのジョブが並列実行されます!
特定のリポジトリ内で mr update
すると、そのリポジトリだけが更新されます。
より一般的に言えば、どの mr
コマンドも現在のリポジトリ以下
あるいはカレントディレクトリ以下の全てのリポジトリに再帰的に作用します。
そのほか mr commit
, mr push
, mr status
, mr diff
など様々なコマンドが利用できます。
これらは対象のリポジトリがどんなバージョン管理システムであっても同じように使えます。
当然ながら、そのバージョン管理システム固有のコマンドも利用できます。
また、コマンドは mr up
, mr pu
のように
他のコマンドと明白に区別できる部分まで打てば、後は省略できます。
さて、もしあなたが mr update
した場合は常に、標準の git pull
の代わりに git pull --rebase
を利用したいとしましょう。
そんな時には ~/.mrconfig
を編集することで動作を変更できます。
各リポジトリに Makefile
があるような感じですね。
[foo]
checkout = git@github.com:joeyh/foo.git
update = git pull --rebase
あなた独自のコマンドを作ることもできます。
[bar]
# リポジトリには fork 元があり、checkout の際には
# そちらを remote の upstream として設定したい場合
checkout =
git clone git@github.com:joeyh/bar.git
cd bar
git remote add upstream git@github.com:barbar/bar.git
# `mr zap` としたら upstream と統合します
zap =
git pull upstream
git merge upstream/master
git push origin master
グローバルに利用できるようコマンドを設定する事もできます。
そうすると mr
は全てのリポジトリでそのコマンドを使えるようになります。
[DEFAULT]
# git リポジトリ内で `mr gc` した場合の動作を mr に教えます
git_gc = git gc "$@"
さて、ここまで myrepos を使って多数のリポジトリを簡単に管理する方法を見てきましたが、
これでもまだ機能の表面をなぞっただけに過ぎません。
他にできる事の例をいくつか挙げてみます。
- 12時間ごとに一度だけリポジトリを update する
- リポジトリに commit する際、その直前に任意のコマンドを実行する
- パソコンがオフラインだったために失敗した動作を覚えておき、 オンラインになった時にそれらを再実行する
- 複数の関連しあったリポジトリを一つのディレクトリにまとめ、そこに置いた
.mrconfig
ファイルにリポジトリのリストを格納する。 そのファイルを~/.mrconfig
から読み込むことで 結合した一つの論理リポジトリとして扱う - ホームディレクトリ全体をバージョン管理下に置く (VCS-Home(英語) を参照のこと)