7

何らかの理由で、SVN リポジトリのローカル コピーが、親ディレクトリを作業コピーとして認識しなくなりました。通常は、別のフォルダーに再度チェックアウトし、新しい作業コピーを変更したファイルで上書きすることで、これを修正します。次に、新しいフォルダーからコミットします。

レポには何千もの大きな画像が含まれており、チェックアウトに時間がかかるため、今回はそれを避けたいと思います。したがって、私がやりたいことは、非完全再帰的に新しいディレクトリにチェックアウトし、既存のファイルを新しいディレクトリにコピーしてから、すべてをチェックインすることです。

問題は、私がいくつかのファイルしかチェックアウトしていないことを SVN が認識していることです。それを偽造して、SVNに完全なチェックアウトを行ったと思わせる方法はありますか? (たとえば、実際にすべてをチェックアウトすることなく、完全なチェックアウトのために .svn フォルダーだけを取得する方法)

4

4 に答える 4

3

新しい場所でリポジトリをスパース チェックアウトすると、必要なことが行われるはずです ( http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html )。私があなたを正しく理解していれば、一番上のディレクトリの空のチェックアウトを実行してから、必要なアーティファクトだけで「svn up」を実行し、深さを設定してください。

たとえば、'foo' という名前の最上位フォルダーがあり、そこに 'bar' と 'zoog' という 2 つのフォルダーが含まれているとします。

/foo
  /bar
    -the files I want
  /zoog
    -the universe

フォルダ「zoog」には、現時点では気にしないファイルが多数ありますが、「bar」で作業できるようにしたいです。私は次のことをします:

svn co --depth empty file:///var/svn/repos/FooRepo foo
cd foo
svn up --set-depth infinity bar

「svn up」はすべてが最新であることを示し、「foo」と「bar」に変更を加えて、「zoog」もチェックアウトしたかのように、すべてのオーバーヘッドなしでコミットできます。

(svn update の --set-depth の引数は、exclude、empty、files、immediate、および infinity です)

于 2011-10-25T16:08:26.373 に答える
1

.svnほとんどの場合、チェックアウトのたびに隠しフォルダが破損または削除されています。

コマンドラインを使用して他の場所で実行し、そこからフォルダーsvn co svn://your/svn/repository --depth immediatesを復元します。次に、サブフォルダーを親フォルダーに再関連付けるために、多くのシーケンスを実行.svnする必要があります。svn update .svn cleanup

于 2011-10-03T16:27:50.980 に答える
0

まず、作業コピー全体をバックアップします。次に、作業コピーを最後のリビジョンに更新します。最後のリビジョンにはルートフォルダがあります。SVNはそのフォルダーへの書き込みを再試行します。次に、ツリーの競合が表示されます。次に、クリーンアップを実行して、再度コミットします。

于 2011-10-03T16:07:03.857 に答える
0

作業コピーのルートのみが破損していて、大きな (または多数の) ファイルが作業コピーのルートの下のディレクトリにある場合、次の手順は、リポジトリからファイルを再度ダウンロードしなくても機能するはずです。

> # 1) adjust these:
> WC=/bad/root/of/working/copy
> REPO=svn://localhost/url/to/repo/trunk/proj

> cd $WC
> # 2) make sure there is no half-baked stuff
> rm -rf .svn

> # 3) remove files in WC-root (would wreck havok later)
> rm -v $(svn ls --depth=files $REPO)

> # 4) ckeck out a clean .svn for this dir into another place
> svn co --depth=immediates $REPO /tmp/tmp-wc
> # 5) copy .svn this to this place
> cp -a /tmp/tmp-wc .

> # 6) "reconnect" children, download files in root
> svn up --set-depth=infinity .
Revision 42.

その後、他に損傷がなければ通常の操作が可能です。

ノート:

  • ステップ 3+4) リポジトリ ルートには多くのデータが含まれていないため、このステップは簡単です。ただし、チェックインされていない変更がある可能性がある場合は、事前にこれらをバックアップしておいてください。
  • 手順 6) サブディレクトリ内のデータは変更されていないため、再度ダウンロードされることはありません。ルート ディレクトリのデータが再度取得されます。
于 2011-10-24T18:11:28.547 に答える