2009-06-08 22 views
5

Tôi muốn thêm tất cả các tệp không phiên bản trong thư mục vào SVN bằng SharpSVN.Thêm tệp bằng SharpSVN

tôi đã cố gắng lệnh svn thường xuyên trên dòng lệnh đầu tiên:

C:\temp\CheckoutDir> svn status -v 

tôi thấy tất cả subdirs, tất cả các file mà đã được kiểm tra tại, một vài tập tin mới được dán nhãn, không có gì có chữ "L "?" "chỉ báo khóa

C:\temp\CheckoutDir> svn add . --force 

Điều này dẫn đến tất cả các tệp mới trong các subdir, đã được tự kiểm soát phiên bản.

Tôi muốn thực hiện tương tự bằng SharpSVN. Tôi sao chép một vài tập tin thêm vào cùng thư mục và chạy mã này:

... 
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); 
    } 
} 

Nhưng một SvnException được nâng lên:

  • SvnException.Message: Làm việc sao chép 'C: \ temp \ CheckoutDir' khóa
  • SvnException.File: .. \ .. \ .. \ lật đổ \ libsvn_wc \ lock.c"

Không dụ svnclient khác đang chạy trong mã của tôi, tôi cũng đã cố gắng gọi

svn.cleanup() 

ngay trước khi Thêm, nhưng vô ích.

Vì số documentation khá mơ hồ;), Tôi đã tự hỏi liệu có ai ở đây biết câu trả lời hay không.

Cảm ơn trước!

Jan

+1

Bạn đã thử hỏi trên các bảng thảo luận của SharpSVN chưa? Bạn có thể có được một phản ứng tốt hơn ở đó. – hao

+0

Tôi sẽ, trong thời gian đó, tôi đã xem xét mã kiểm tra Đơn vị: http://sharpsvn.open.collab.net/source/browse/sharpsvn/trunk/src/SharpSvn.Tests/Commands/AddTests.cs TestAddDirectoryRecursively làm một cái gì đó tương tự, nhưng Thêm một dir1 mới dưới WorkingcopyPath và everyting trong nó. Tôi muốn Thêm tất cả mọi thứ trong bản thân WorkingCopyPath. – jan

Trả lời

5

Sử dụng công cụ này http://svncompletesync.codeplex.com/ hoặc lấy mẫu làm mẫu. Nó thực hiện chính xác những gì bạn cần.

+0

Công cụ tuyệt vời Malcom, thực hiện chính xác những gì nó nói trên hộp. +1 –

1

Tôi nghĩ bạn không nên đi theo đường dẫn bằng dấu ','. Hãy thử:

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

Vui lòng thảo luận thêm về danh sách gửi thư/thảo luận SharpSvn, vì hành vi bạn đang xem có thể là lỗi.

+0

Mã bạn đề xuất cho tôi biết: "C: \ temp" không được kiểm soát phiên bản. Cái nào đúng. Nhưng không giúp tôi. Tôi sẽ đăng lên diễn đàn ngay khi có thể. Cảm ơn! – jan

2

Tôi đã thử công cụ của Malcolm nhưng không thể chạy ngay bây giờ có vẻ như đã vài tuổi, nhưng sau khi xem mã nguồn, có vẻ như đây thực sự là tất cả những gì bạn cần để đồng bộ hóa cục bộ thư mục có trong 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); 
Các vấn đề liên quan