質問
sharpsvnを使用して、ディレクトリの下にあるすべての未溶融ファイルをSVNに追加したいと思います。
最初にコマンドラインで通常の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:.. .. .. subversion libsvn_wc lock.c ""
他のsvnclientインスタンスは私のコードで実行されていません、私も電話をかけようとしました
svn.cleanup()
追加の直前ですが、役に立ちません。
以来 ドキュメンテーション かなり曖昧です;)、私はここの誰かが答えを知っているかどうか疑問に思っていました。
前もって感謝します!
1月
解決
これを私のツールを使用してください http://svncompletesync.codeplex.com/ または、サンプルとして使用します。それはあなたが必要とする正確なことをします。
他のヒント
私はマルコムのツールを試しましたが、数年前のように見えるので今実行することができませんでしたが、ソースコードを見た後、これは本当にあなたがローカルチェックアウトフォルダーと一緒に同期するために使用する必要があるように見えますSVNに1つ:
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);
「」でパスを接尾辞すべきではないと思います。試す:
svn.Add(@"C:\temp\CheckoutDir" , saa);
あなたが見ている行動はバグかもしれないので、これについてはSharpsVNディスカッションボード/メーリングリストでこれについてさらに説明してください。