2

いくつかのツリーをローカル ディスクに複製しましたが、限られたラップトップ ディスクから多くのスペースを取りすぎています。SVN や CVS などの分散されていないバージョン管理とは異なり、git または Mercurial リポジトリをチェックアウトすると、履歴全体を含むツリー全体が取得されます。これらのリポジトリにコードをコミットすることはめったにありませんが、それらを維持したいと考えています-現在のところ、これらの分散型バージョン管理システムがローカル ディスクを浪費しすぎていることがわかりました。

この無駄をなくすために私がこれまでに持っているいくつかのアイデアは次のとおりです。

  • ローカル ディスクに zfs または btrfs パーティションを作成します (永続化しすぎたくないため、おそらくループ ファイルシステムです)。これにより、複製されたファイル チャンクをより有効に活用できます。これには CPU サイクルがかかりすぎて非効率になる可能性があります。

  • バージョン管理の使用をやめ、リポジトリ全体を含む .zip ファイルを毎日ダウンロードするスクリプトを作成します。これはあまりにも多くの帯域幅を必要とするため、私はそれをしたくありません。

私の究極の解決策は、SVN と CVS を使用したように git/hg を使用することです — サーバー上に履歴を保持し、ローカルには最新のリビジョンのみを保持するか、ローカルに限定された履歴を保持します。ログまたはファイルを以前のリビジョンに戻すと、ローカルで利用できない場合、バージョン管理システムは必要な情報をリモートから取得します。

4

5 に答える 5

3

hg clone ヘルプ情報から:

To pull only a subset of changesets, specify one or more revisions
identifiers with -r/--rev or branches with -b/--branch. The resulting
clone will contain only the specified changesets and their ancestors.

HG のリビジョン構文を使用して、取得するリビジョンの数を制限できるはずです。これは、最新のものよりも少し多くしたい場合を想定しています。-r ヒントを使用して、ヒントを取得します。

于 2013-02-12T17:17:52.283 に答える
2

svnを使用すると、実際には、チェックアウトされたリビジョンの2つの完全な非圧縮コピーがあります(すべてのファイルの完全なコピーがあります.svn)。Mercurialを使用すると、チェックアウトされたリビジョンの完全な非圧縮コピーが1つと、高度に圧縮されたバイナリデルタ表現(下.hg/store)が1つあります。非常に多くの場合(差分テキストファイル)、すべてを含むhgクローンは、実際には、単一のリビジョンのsvnチェックアウトよりも全体的に小さくなります。

ブロックレベルの重複排除はまったく役に立たないと思います。MercurialとGitはどちらも、非常に効率的なバイナリデルタを使用しており、圧縮されてストアに冗長な情報がほとんど残らないため、ブロックが整列されません。

于 2013-02-11T14:43:07.240 に答える
2

git では--depth、オプションを使用して浅いコピーのみを作成できます。

一方、この方法では多くのスペースを節約できません: http://blogs.gnome.org/simos/2009/04/18/git-clones-vs-shallow-git-clones/

于 2013-02-11T13:01:52.220 に答える
1

Mercurial では、空の作業コピーを要求できます (.hg フォルダーのみを複製します)。

hg clone -U <source>

その他のオプションについては、 hg help cloneを参照してください。

これが役立つことを願っています。

于 2013-02-11T14:47:23.517 に答える