9

私は水銀を初めて使用します。このトピックについて多くのことを読みましたが、明確な答えを見つけることができませんでした。

Mercurial ガイドには次のように書かれています。

リポジトリ wiki ページには、「リポジトリ ルートの .hg ディレクトリと共存するすべてのファイルとディレクトリは、作業ディレクトリに存在すると言われています」と記載されています。

ここで、サブレポをメインレポに「リンク」するには、次のようにします。

hg init main
cd main
echo subrepo = ../subrepo > .hgsub
hg clone ../subrepo subrepo           # (1)
hg add
hg ci -m "initial rev of the main repo"

上記の定義は、 (1) を実行したときに実際に のコピーを作成していることを意味しますか?? subrepoそれとも、へのシンボリックリンクを作成してい../subrepoますか? の出力によるとls、実際のコピーです。しかし、それは私にはとても奇妙に聞こえます...誰かがこの主題に少し光を当てることができれば、私は感謝します.

4

2 に答える 2

6

まず第一に、Mercurial のその部分については、私は専門家ではありませんが、私が理解していることは次のとおりです。

いいえ、ディレクトリ全体へのリンクを作成していません。代わりに、ファイルはその内部でハードリンクされていました。

これは、ディレクトリ構造を分離しておくためにディスク上のスペースが予約されていることを意味しますが、ファイルはすべて同じです。なぜなら、それらはクローンされたばかりであり、元のファイルに戻るリンクとして構築されているからです。

addまたはcommit( ) コマンドを使用してリポジトリの操作を開始すると、ciMercurial によってハードリンクが切断され、必要に応じてそれぞれのファイルが個別に作成されます。

さて、これは純粋に技術的なことであり、これを知ったり気にしたりする必要はありません。簡単にする場合は、クローンを元のリポジトリの完全なコピー、個別のファイルなどと考えてください。ハードリンクの部分は、同じもののためにディスクスペースを節約することです。

典型的なプロジェクトには多くのファイルがあり、典型的なチェンジセットは少数のファイルしか変更しないため、クローンを作成する典型的な理由は、固定された一連の変更を行うためであるため、ハードリンクは理にかなっています。リポジトリの存続期間中、オリジナルと 100% 同一になります。

そうでない場合は、すべて Mercurial が黙って処理します。

于 2010-12-08T18:44:59.303 に答える
2

サブリポジトリについて話さずにクローンを作成するとどうなるかを見てみましょう。あなたがするとき

$ hg clone A B

すると、Mercurial は内のファイルにハード リンクA/.hg/store/dataを作成します。したがって、呼び出されたファイルxが追跡されている場合、クローンの後にそれが表示されます

A/.hg/store/data/x.i

B/.hg/store/data/x.i

ハード リンク - これは、2 つのファイル名が実際には同じファイルを参照していることを意味します。Lasse が指摘するように、clone への変更を決してコミットしない可能性があるため、これは賢明です。したがって、とclone用に 2 つの異なるファイルをx作成する理由はありません。もう 1 つの利点は、特にファイルが非常に大きい場合、ファイルをコピーするよりもハード リンクを作成する方がはるかに高速であることです。ハード リンクは一定時間の操作です。x.iABx.i

上記の例では、サブリポジトリをリポジトリに追加subrepoしていmainます。サブリポジトリは次の 2 つで構成されます。

  1. サブリポジトリ自体。これはあなたがするときにあなたが作成するものです

    $ hg clone ../subrepo
    
  2. サブリポジトリのメタデータ。これは、.hgsubファイルに保存するものです。サブリポジトリが必要な場所と、Mercurial がそのクローンを作成できる場所を Mercurial に伝える必要があります。

リポジトリをコピーまたはシンボリックリンクするかどうかを尋ねると、ls. その後、サブリポジトリがどこにあると期待できるかを示すメタデータを Mercurial に追加しました。これは、通常のファイルシステムの意味でのシンボリック リンクとは何の関係もありません。Mercurial の単なるメタ データです。

于 2010-12-09T12:29:25.540 に答える