2009-05-05 169 views
3

我使用CollabNET的SharpSvn库。我想在提交时设置修订作者,但我总是以我的Windows用户名进行提交。如何在c#中使用SharpSVN库设置SVN提交作者

这并没有为我工作:

System.Net.NetworkCredential oCred = new 
    System.Net.NetworkCredential("user"​, "pass"); 
client.Authentication.DefaultCredentials = oCred; 

我也试过:

client.SetProperty("", "svn:author", "user"); 

但我得到的目标(第一个参数)的错误是坏的。

那么你能告诉我如何设置用户(作者)提交到颠覆库在C#?

+0

您应该使用.SetRevisionProperty()更改修订版属性。 – 2009-05-05 13:44:21

回答

7

这一切都取决于您如何连接到您的存储库,因为存储库负责为修订添加用户名。 (它通常会复制连接的凭证,但不必这样做)。

当您使用file:/// repository(通常不推荐 - 请参阅The Subversion Book)时,您可以直接在提交上解决此问题。

using (SvnClient client = new SvnClient()) 
{ 
    client.Authentication.Clear(); // Clear predefined handlers 

    // Install a custom username handler 
    client.Authentication.UserNameHandlers += 
     delegate(object sender, SvnUserNameEventArgs e) 
     { 
      e.UserName = "MyName"; 
     }; 

    SvnCommitArgs ca = new SvnCommitArgs { LogMessage = "Hello" } 
    client.Commit(dir, ca); 
} 

如果您连接到远程仓库,您可以更改时的pre-revprop-change钩子安装在库一个修订版本的作者(见The Subversion Book

using (SvnClient client = new SvnClient()) 
{ 
    client.SetRevisionProperty(new Uri("http://my/repository"), 12345, 
           SvnPropertyNames.SvnAuthor, 
           "MyName"); 

    // Older SharpSvn releases allowed only the now obsolete syntax 
    client.SetRevisionProperty(
     new SvnUriTarget(new Uri("http://my/repository"), 12345), 
     SvnPropertyNames.SvnAuthor, 
     "MyName"); 

} 

[2009-08 -14] 最近SharpSvn版本还允许这样的:

using (SvnRepositoryClient rc = new SvnRepositoryClient()) 
{ 
    SvnSetRevisionPropertyRepositoryArgs ra; 
    ra.CallPreRevPropChangeHook = false; 
    ra.CallPostRevPropChangeHook = false; 
    rc.SetRevisionProperty(@"C:\Path\To\Repository", 12345, 
         SvnPropertyNames.SvnAuthor, "MyName", ra); 
} 

最后一个例子假设到仓库直接文件访问,但它绕过[R epository挂钩以获得最佳性能。