3

CollabNET の SharpSvn ライブラリを使用しています。コミット中にリビジョン作成者を設定したいのですが、いつも自分の Windows ユーザー名でコミットしてしまいます。

これは私にはうまくいきません:

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

私も試しました:

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

しかし、ターゲット (最初の引数) が間違っているというエラーが表示されます。

そこで、C#でコミットのユーザー(作成者)をsubversionリポジトリに設定する方法を教えてください。

4

1 に答える 1

7

リポジトリはユーザー名をリビジョンに追加する責任があるため、これはすべてリポジトリへの接続方法に依存します。(通常、接続の資格情報をコピーしますが、その必要はありません)。

file:/// リポジトリ (通常は推奨されません - 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);
}

この最後の例では、リポジトリへの直接フ​​ァイル アクセスを想定していますが、最適なパフォーマンスのためにリポジトリ フックをバイパスします。

于 2009-05-05T13:32:48.097 に答える