2009-06-08 29 views
5

SharpSVNを使用してディレクトリ下のすべてのバージョン管理されていないファイルをSVNに追加したいと思います。SharpSVNを使用してファイルを追加

私は、最初のコマンドライン上で定期的なのsvnコマンドを試していない:私はすべてのサブディレクトリを参照してください

C:\temp\CheckoutDir> svn status -v 

は、すでにチェックインされるすべてのファイルが、いくつかの新しいファイルがラベルされた、何を「Lで「?」 "ロック表示

C:\temp\CheckoutDir> svn add . --force 
この結果、すでにバージョン管理下にあるサブディレクトリ内のすべての新しいファイルが追加されます。

私はSharpSVNを使用して同じことをしたいと思います。私は、同じディレクトリにいくつかの余分なファイルをコピーして、このコードを実行します。

... 
using (SharpSvn.SvnClient svn = new SvnClient()) 
{ 
    SvnAddArgs saa = new SvnAddArgs(); 
    saa.Force = true; 
    saa.Depth = SvnDepth.Infinity; 
    try 
    { 
     svn.Add(@"C:\temp\CheckoutDir\." , saa); 
    } 
    catch (SvnException exc) 
    { 
     Log(@"SVN Exception: " + exc.Message + " - " + exc.File); 
    } 
} 

をしかしSvnExceptionが発生します

  • SvnException.Message:作業コピー 'C:\ tempに\ CheckoutDirは'
  • ロック
  • SvnException.File:.. \ .. \ .. \転覆\ libsvn_wc \ lock.c」

他のsvnclientインスタンスが私のコードで実行されていない、 は、私はまた、を呼び出してみました

svn.cleanup() 

追加の直前ですが、利用できません。

documentationはむしろあいまいです;)、 ここに誰かが答えを知っているのだろうかと思っていました。

ありがとうございます!

01月

+1

SharpSVNディスカッションボードで質問してみましたか?あなたはおそらくより良い応答を得ることができます。 – hao

+0

私は、ユニットテストのコードを見ている間に、私はします:http://sharpsvn.open.collab.net/source/browse/sharpsvn/trunk/src/SharpSvn.Tests/Commands/AddTests.cs TestAddDirectoryRecursively同様のことをしますが、WorkingcopyPathの下に新しいdir1を追加します。 WorkingCopyPath自体の下にすべてを追加したいと思います。 – jan

答えて

5

私のツールhttp://svncompletesync.codeplex.com/をサンプルとして使用してください。 これはまさにあなたが必要とするものです。

+0

偉大なツールMalcomは、それが箱に書かれていることを正確に行います。 +1 –

1

私はあなたが「」でパスをサフィックスべきではないと思います。あなたが見ている動作はバグかもしれないので、

svn.Add(@"C:\temp\CheckoutDir" , saa); 

SharpSvnディスカッションボード/メーリングリストで、さらにこれを話し合うようにしてください:試してみてください。

+0

あなたが提案したコードでは、「C:\ temp」はバージョン管理下にありません。どちらが正しい。しかし、私を助けません。できるだけ早くフォーラムに投稿します。ありがとう! – jan

2

私はMalcolmのツールを試しましたが、数年前のように見えるようになりましたが、ソースコードを確認した後、ローカルチェックを同期するために必要なすべてのものですSVNにあるものを含むフォルダ:

string _localCheckoutPath = @"C:\temp\CheckoutDir\"; 
SvnClient client = new SvnClient(); 

Collection<SvnStatusEventArgs> changedFiles = new Collection<SvnStatusEventArgs>(); 
client.GetStatus(_localCheckoutPath, out changedFiles); 

//delete files from subversion that are not in filesystem 
//add files to suversion , that are new in filesystem 

foreach (SvnStatusEventArgs changedFile in changedFiles) 
{ 
    if (changedFile.LocalContentStatus == SvnStatus.Missing) 
    { 
     client.Delete(changedFile.Path); 
    } 
    if (changedFile.LocalContentStatus == SvnStatus.NotVersioned) 
    { 
     client.Add(changedFile.Path); 
    } 
} 

SvnCommitArgs ca = new SvnCommitArgs(); 
ca.LogMessage = "Some message..."; 

client.Commit(_localCheckoutPath, ca);