2009-05-05 161 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掛鉤以獲得最佳性能。