2009-06-08 75 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比較模糊;), 我想知道是否有人知道答案。

在此先感謝!

1月

+1

您是否試過在SharpSVN討論板上提問?你可能會在那裏得到更好的迴應。 – hao 2009-06-08 16:30:54

+0

我會,同時我看單元測試代碼:http://sharpsvn.open.collab.net/source/browse/sharpsvn/trunk/src/SharpSvn.Tests/Commands/AddTests.cs TestAddDirectoryRecursively做了類似的事情,但在WorkingcopyPath下添加了一個新的dir1,並在其中添加了一個新的dir1。我想在WorkingCopyPath本身下添加所有內容。 – jan 2009-06-08 17:29:16

回答

1

我認爲你不應該用','後綴的路徑。嘗試:

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

請不要在SharpSvn討論板/郵件列表上進一步討論這個,因爲你所看到的行爲可能是一個錯誤。

+0

您建議的代碼告訴我:「C:\ temp」不在版本控制之下。哪個是對的。但是不幫助我。我會盡快在論壇上發帖。謝謝! – jan 2009-06-09 08:56:53

2

我試過Malcolm的工具,但是現在看起來還不到幾年,但是看了看源代碼之後,它看起來像是真的需要用來同步本地的checked與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);