藤原です。
2015年8月7日 22:27 Kaz Nishimura <
kaz...@vx68k.org>:
> 私の乏しい経験からすると、サブリポジトリーをクローンするには作業
> ディレクトリーのアップデートが必要なのではないかと思います。ホス
> ト 2 から作業ディレクトリーをアップデートしない形でクローンを実
> 行してみれば、この仮説が当たっているか確認できそうですね。
現状の実装は、仰る通り、サブリポジトリのクローンは、「作業領域更新
の一環」として実施されています。
ですので:
>> サブリポジトリとメインリポジトリの両方をリモートのホストにクロー
>> ンするにはどのように指定するのがよいのでしょうか?
>>
>> ホスト1からホスト2にリポジトリのクローンを行う場合に
>> 通常のリポジトリではれば、ホスト1にログインして実行しても
>> ホスト2にログインして実行しても同じ様にクローン可能です。
>> ところがリポジトリがサブリポジトリを含んでいる場合には
>> ホスト2にログインして実行した場合にはサブリポジトリも含んで
>> 全体がクローンされますが、ホスト1にログインしてクローンした場合には
>> メインのリポジトリしかクローンされないようです。
「対象リポジトリの履歴情報の複製」に関しては、どちらの方向でクロー
ンしても同じ挙動ですが、作業領域更新を伴わない後者のケースでは、サ
ブリポジトリの複製は行われません。
host1 上での "hg clone" である前者:
@host1$ hg clone repo ssh://host2/cloned
に対して、等価な host2 上での(逆方向) "hg clone" は、作業領域複
製を抑止した以下のものになります。
@host2$ hg clone -U ssh://host1/path/to/repo cloned
>> 簡単な指定でサブリポジトリを含む全体をクローンすることはできな
>> いものでしょうか?
現状の基本機能の範囲で何とか頑張るのであれば:
- clone に引き続き "hg update" を実施
@host1$ hg clone repo ssh://host2/path/to/cloned && \
ssh host1 hg -R path/to/cloned update
mercurial-server 等を使ったホスティング先へのクローンのような
ケースでは、ssh 経由での任意のコマンド実行ができませんから、こ
の手は使えないでしょうねぇ。
- サブリポジトリを列挙+個別に "hg clone" を実施
作業領域配下のサブリポジトリを列挙しようとした場合、現状で使用
できる機能は:
1. hg debugfileset "subrepo()"
- サブリポジトリ種別が不明なので、別途判定の必要がある
2. hg debugsub
- 出力が機械処理向けではないので、解析が少々面倒
いずれの場合も、サブリポジトリ配下の再帰的な列挙は行わないので、
再帰的な処理が必要なら、別途スクリプト上で再帰処理のためのルー
プを組む必要があります。
こちらは「簡単な指定」という要求には反する気もしますが……
今のところは、上記のような方法ぐらいでしょうか。
サードパーティ製拡張機能がアリなら onsub エクステンションを使うと
いう手も。多分これが一番簡単かな?
https://mercurial.selenic.com/wiki/OnsubExtension
なお、リポジトリホスティング等の運用も含めて考えた場合、サブリポジ
トリの利用には配慮すべき点がいくつかあります。
http://d.hatena.ne.jp/flying-foozy/20120526/1338047861 では、以下
の点について説明していますので、参考になれば幸いです。
- サブリポジトリ取得が update 契機である事
- ホスティング利用時の .hgsub の書き方/リポジトリ配置方法
--
----------------------------------------------------------------------
FUJIWARA Katsunori(
flying...@gmail.com)