2

私は、Subversion 1.7が、作業用コピーのためにすべての原始的なものを1か所にまとめているのが好きです。ただし、同じコードベースのチェックアウトが複数あることがよくあります(主に、まだ存在しないstash関数を複製するため)。

ディスク容量を節約するために、これらすべての元のフォルダを組み合わせる方法はありますか?それで、複数のクリーンコピーがありませんか?特に:

  1. 現在チェックアウトされているファイルのベースコピーではない「余分な」クリーンなファイルをそこに置くことは安全ではありませんか?
  2. これは、特にWindowsで、何らかの方法でリンクを使用して実行できますか?
4

2 に答える 2

3

それはできないと思います。SVNは、各元のファイルへの参照番号をカウントします。ゼロに達した場合、「svncleanup」はそれらのファイルを削除します。

一方、SVN 1.7.5のハッキーな方法を試すこともできます(自己責任で!今後のSVNバージョンがこれらのハックと互換性があることを保証することはできません。私は試しませんでしたが、私の知る限り、 SVNは機能します。これは1.7.5で機能するはずです):

  1. 'refcount'をより高い値に設定して、すべての作業コピーのチェックサムが削除されないようにします(すべての「svncleanup」呼び出しの前にこれを行う必要があります---新しくインストールされた元のファイルの「refcount」を更新します)。

    sqlite3 .svn / wc.db "update PRISTINE set refcount = refcount + 100;"

  2. Windowsはリンクをサポートしていますが、あまり人気はありません。http: //en.wikipedia.org/wiki/NTFS_symbolic_link 少なくとも、XPでも問題なく機能します。

したがって、ハッキーな方法は、ディレクトリを作成し、その中のすべての元のファイルを(おそらくスクリプトを使用して)収集することです。そのディレクトリを指すリンクを.svn/pristineに作成します。上記のSQLコマンドを実行し、すべての「svncleanup」の前に実行します。

また、その構成から通常の状態に戻す方法をアルゴリズムで提供することもできます(問題が発生した場合)。

  1. リンク.svn/pristineを削除し、それらを空のディレクトリに置き換えるか、(より良く、より速く)すべての元のディレクトリを含むそのディレクトリの内容のコピーに置き換えます。
  2. この記事のようにSmartSVNで作業コピーを修復します:http://vcs.atspace.co.uk/2012/06/20/missing-pristines-in-svn-working-copy/ atは「refcount」の場合に何が起こるかについても説明していますゼロになります)

幸運を:)

于 2012-06-28T09:20:55.380 に答える
0

Dmitryの回答を調べましたが、より簡単な方法があると思います。それは、元のディレクトリ内のファイルにハードリンクを使用することです。その場合、ファイルの1つのバージョンを削除しても、他のコピーには影響しません。欠点は、多くのツール(バックアップソフトウェアなど)が元の状態を何度もバックアップすることですが、メインディスクはそれほど消費されません。

また、このことから、svn cleanupを実行すると、大きな変更があった場合にローカルディスクスペースを大幅に節約できることがあることを学びました。

要約すると、私のsvnclone.batはおおよそ次のようになります。

robocopy /E %1 %2 /XD .svn
robocopy /E %1\.svn %2\.svn /XD pristine
ln -r %1\.svn\pristine %2\.svn\pristine

これは、ストレートコピーよりもはるかに高速です。

欠点は、時間の経過とともに、これらのクローンが長寿命である場合、重複が表示されることです。しかし、私の使用法としてはそれで十分だと思います。

ln.exeはhttp://schinagl.priv.at/nt/ln/ln.htmlからのものです

于 2012-06-29T10:18:34.137 に答える