2010-03-05 5 views
0

sharpsvn을 사용하여 커밋하는 데 문제가 있습니다. 이제 작업 복사본의 모든 파일을 추가합니다 (파일이 추가 된 경우 예외가 발생 함). 그리고 나서 커밋합니다. 그것은 작동하지만 예외를 발생시킵니다. add()를 수행하기 전에 리포지토리의 상태를 확인하고 변경된 새 파일이나 파일 만 추가하는 방법이 있습니다. 그리고 작업 카피에서 하나의 파일이나 폴더를 삭제하면 저장소에서이 파일이나 폴더를 어떻게 삭제할 수 있습니까? 코드 :sharpSVN에서 커밋

String[] folders; 
folders = Directory.GetDirectories(direccionLocal,"*.*", SearchOption.AllDirectories); 
foreach (String folder in folders) 
      { 
       String[] files; 
       files = Directory.GetFiles(folder); 
       foreach (String file in files) 
       { 
        if (file.IndexOf("\\.svn") == -1) 
        { 
         Add(file, workingcopy); 
        } 
       } 

      } 


      Commit(workingcopy, "change"); 

추가 :

public bool Add(string path, string direccionlocal) 
    { 
     using (SvnClient client = new SvnClient()) 
     { 
      SvnAddArgs args = new SvnAddArgs(); 
      args.Depth = SvnDepth.Empty; 
      Console.Out.WriteLine(path); 
      args.AddParents = true; 


      try 
      { 
       return client.Add(path, args); 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 

     } 
    } 

커밋 :

public bool Commit(string path, string message) 
    { 
     using (SvnClient client = new SvnClient()) 
     { 
      SvnCommitArgs args = new SvnCommitArgs(); 


      args.LogMessage = message; 
      args.ThrowOnError = true; 
      args.ThrowOnCancel = true; 

      try 
      { 
       return client.Commit(path, args); 
      } 
      catch (Exception e) 
      { 
       if (e.InnerException != null) 
       { 
        throw new Exception(e.InnerException.Message, e); 
       } 

       throw e; 
      } 
     } 
    } 

답변

3

당신이 파일을 추가

using(SvnClient client = new SvnClient()) 
{ 
    SvnAddArgs aa = new SvnAddArgs(); 
    aa.Depth = SvnDepth.Infinity; 
    aa.Force = true; 

    client.Add(rootDir, aa); 
} 

같은 것을 시도해 봤어?

이 파일들은 모두 작업 사본에 추가되지 않아야합니다. (svn add --force <dirname>에 해당)

어떤 예외가 발생하는지 알려주면 도움이됩니다. Subversion 라이브러리는 수천 개의 다른 오류 코드를 반환 할 수 있습니다. 대부분의 사람들은 재미있는 메시지 본문을 가지고 있습니다.

SharpSvn은 모든 특정 Subversion 오류를 내부 예외로 중첩합니다. 끝에있는 코드는 외부 예외를 제거하고 나머지 예외의 스택 추적을 잃어버린다. 외부 예외에 .ToString()을 사용하면 최상의 오류 텍스트를 얻을 수 있습니다. (그리고 svn.exe와 비슷한 오류 출력을하기 위해서는 모든 .Messages를 연결해야합니다.)

this other answer도 참조하십시오.