あなたは沢山のバージョン管理用リポジトリを持っています。
時にはそれらを一度に 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(英語) を参照のこと)