多くのサブディレクトリを含むソース管理のプロジェクトがあり、その多くは現時点では必要ないとします。
ツリー全体の一部のみを含む作業コピーを作成し、変更を加え、コミットし、プッシュする機能を維持したいと考えています。
これは可能ですか?もしそうなら、どうすればできますか?
私はまだバザーとマーキュリアルのどちらを使用するかを決定しているので、それらのいずれかに関する回答が役立ちます.
編集:実際には、gitのソリューションも役立ちます。
多くのサブディレクトリを含むソース管理のプロジェクトがあり、その多くは現時点では必要ないとします。
ツリー全体の一部のみを含む作業コピーを作成し、変更を加え、コミットし、プッシュする機能を維持したいと考えています。
これは可能ですか?もしそうなら、どうすればできますか?
私はまだバザーとマーキュリアルのどちらを使用するかを決定しているので、それらのいずれかに関する回答が役立ちます.
編集:実際には、gitのソリューションも役立ちます。
私の知る限り、ツリーのサブセットのクローンを作成することはできませんが、他の可能性もあります。
Git:コマンドgit clone
には--depth
フラグがあります:
--depth <depth>
指定されたリビジョン数に切り捨てられた履歴を持つシャロークローンを作成します。浅いリポジトリにはいくつかの制限があります(クローンやフェッチ、プッシュやプッシュはできません)が、長い歴史を持つ大規模なプロジェクトの最近の履歴にのみ関心があり、修正をパッチとして送信します。
バザール:コマンドのフラグ--lightweight
は、checkout
履歴全体ではなく作業ディレクトリのみをダウンロードし、帯域幅とディスク容量を節約します。すべての操作は引き続きサポートされますが、それらを実行するにはネットワーク接続が必要です。
Merurialにこの機能があるかどうかはわかりません。
すでにリポジトリがあり、これを行いたい場合は、面倒です。
まったく新しいリポジトリでこれを行う場合は、Mercurial の新しいsubreposを確認することをお勧めします。
基本的に、特定のディレクトリのスタンドアロン リポジトリを作成します。
myproject/
.hg/
source code/
... files here ...
documentation/ (subrepo)
.hg/
... files here ...
graphics/ (subrepo)
.hg/
... files here ...
これにより、プロジェクトのさまざまな部分がさまざまなリポジトリに分離されます。「含む」レポ (この場合は myproject) は、コミットするたびにサブレポがどのリビジョンであるかを追跡します。私が言及したsubrepo wikiページはそれをよく説明しています。
この wiki ページから判断すると、この機能はまだ Mercurial に実装されていませんが、実際の分岐ではなく、リポジトリまたはその一部を「変換」することで、おおよそ目的を達成できる拡張機能があります。Hg との間で変換できるため、部分クローニングとしても機能する可能性があります。これはあなたが必要としていたものですか?
ほとんどのDCVSでは、ルールは「1プロジェクト==1リポジトリ」です。「サブプロジェクト」の概念はありません(サブツリーをチェックアウトして作業できるSubversionとは異なります)。
主な理由は、「プロジェクト」のルートフォルダにリポジトリ全体のコピーが含まれていることです。サブフォルダにリポジトリ全体のコピーを作成できれば、事態はかなり複雑になります。
プラス面として、作業コピーの作成は高速な操作です(基盤となるファイルシステムが遅い場合を除く)。
git では、git subtreeを使用できます。これにより、特定のサブプロジェクトだけの「仮想」リポジトリを抽出し、サブプロジェクトに変更を加えてから、それらの変更をマージして戻すことができます。
Bazaarの場合、ネストされたツリーがあります:http: //bazaar-vcs.org/NestedTreesDesignこれにより、大きなプロジェクトをサブプロジェクトに分割できます。
この機能はまだ使用していないので、どれだけうまく機能するかわかりません。
--hardlinkを使用して分岐し、多数のファイルのコピーを回避することもできます(Windowsで動作するかどうかはわかりません...)、履歴なしで分岐する(軽い分岐)、または動作するツリーなしで分岐する(ファイルなし、履歴のみ)。