MercurialでGitのsubmodule?
Gitのsubmoduleをよく知らない(というかGitを全然知らない)のでMercurialの.hgsubとどの程度違うのかわからないけど……
モジュールのリポジトリ
$ cd ~/ $ hg init aaa $ cd aaa $ touch aaa $ hg add $ hg ci -m "add aaa"
モジュールに依存するリポジトリ
$ cd ~/ $ hg init bbb $ cd bbb $ hg clone ../aaa $ echo 'aaa = ../aaa' > .hgsub $ hg add $ hg ci -m "add .hgsub" $ ls -1AF .hg .hgsub .hgsubstate #なんかできてる aaa/ $ cat .hgsubstate 3323fb1550fbf259fe5c907dcf66dad4c3697097 aaa $ cd aaa $ hg sum 親リビジョン : 0:3323fb1550fb tip add aaa ブランチ : default 想定 commit 結果: (改変無し) update 候補 : (現行のまま)
モジュールのリポジトリを更新
$ cd ~/aaa $ touch aaa.aaa $ hg add $ hg ci -m "add aaa.aaa"
モジュールに依存するリポジトリをクローンしてみると
$ cd ~/ $ hg clone bbb ccc $ cd ccc $ ls -1RF .: aaa/ # モジュールのリポジトリもクローン ./aaa: aaa
モジュールに依存するリポジトリでモジュールを更新
$ cd ~/bbb/aaa $ hg pull -u $ hg st # 何もない $ hg ci -m "update aaa" # aaaがアップデートされる $ cd aaa $ hg sum 親リビジョン : 1:d7c5bd358a6f tip add aaa.aaa ブランチ : default 想定 commit 結果: (改変無し) update 候補 : (現行のまま) $ cd ../ $ cat .hgsubstate d7c5bd358a6f7947c69f03fedef0a6e9a2c902c9 aaa
モジュールに依存するリポジトリを再度クローンしてみると
$ cd ~/ $ hg clone bbb ccc $ cd ccc/aaa $ hg sum 親リビジョン : 1:d7c5bd358a6f tip add aaa.aaa ブランチ : default 想定 commit 結果: (改変無し) update 候補 : (現行のまま) $ cd ../ $ cat .hgsubstate d7c5bd358a6f7947c69f03fedef0a6e9a2c902c9 aaa
つまり…… えーと。
- .hgsubにサブリポジトリだよーと書いてあげると無視されずにサブリポジトリ(?)として認識される
- サブリポジトリを特定のリビジョンにしてコミットすると.hgsubstateにリビジョン番号が記述される
- リポジトリをクローンすると.hgsubstateに記述されたリビジョンでサブリポジトリもクローンされる
- リポジトリをコミットしてもサブリポジトリは入らない
ってとこ?