2011-10-03 43 views
7

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

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

問題は、私がチェックアウトした少数のファイル。私はそれを偽造する方法がありますし、SVNはちょうど完全なチェックアウトをしたと思いますか? (例えば、実際にすべてをチェックせずに完全なチェックアウトのために.svnフォルダを保持する方法)

+0

まず:巨大なファイルは作業コピーまたは少なくとも1つのディレクトリのルートに直接です以下?二番目: '.svn'ディレクトリだけを作業コピーのルートで削除しましたか、このディレクトリは他のディレクトリにもありませんでしたか? –

+0

ファイルはメインルートにはありません。破損しているルート.svnディレクトリのみで表示されます。サブディレクトリ内では、ファイルの隣に通常のアイコンが表示されます。 – wheresrhys

答えて

0

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

+0

SVNが最新のリビジョンに更新できません。それを作業コピーとして認識し、ディレクトリ上のSVNコマンドを実行することはできません。 – wheresrhys

1

すべてのチェックアウト内に隠しファイル.svnが破損している可能性があります。

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

+0

私はすでにそれを試みましたが、すべてをチェックアウトするのと同じくらい時間がかかります。それは私にはとても嫌なようです。 – wheresrhys

+1

それから 'svn co svn:// your/svn/repository --depth empty'を試してみて、あなたが望むファイルを選んでください。 – aquaherd

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)サブディレクトリ内のデータは変更されないため、再度ダウンロードされません。ルートディレクトリのデータが再度取得されます。
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は、」私は、現時点では気にしないが、私は「バー」と連携できるようにしたい多数のファイルがあります。私は、次の操作を行います:今、「アップsvnの」

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

は、すべてのものが最新であることを示していると私も「zoog」をチェックアウトしたかのように私は「foo」と「bar」で変更を行い、それらをコミットすることができますすべてのオーバーヘッドを必要としません。

(SVNの更新で、深さを--setする引数は除外されている、空、ファイル、即値、および無限大)

+0

私はそれがおそらく私が必要としていたように見えますが、あなたの答えはプラスでしたが、コマンドラインsvn(Tortoise Guiではなく)を実行するためにSVNを1.7にアップグレードする必要がありました。構造体をv1.6に変換するので、実際にはあなたの答えをテストして動作するかどうかをテストすることはできません。 – wheresrhys

+0

手順3で 'svn up -set-depth infinity bar/folder1'を呼び出し、' E155007 - 作業コピーではありません。だから最初に 'svn up -set-depth-empty bar'を呼び出し、' svn up -set-depth infinity bar/folder1'を呼び出します –

関連する問題