1

SharpSvn .NET ライブラリを使用した経験がある場合は、SVN コミット中にコミット作成者を設定する際に専門知識を活用できます。いくつか試してみましたが、ユーザーが TortoiseSVN に保存されていない限り、すべて SvnRepisitoryIOException がスローされます。ただし、状況に応じて異なるユーザー資格情報を使用したいと考えています。ユーザーのデフォルト資格情報を保存した場合、TortoiseSVN は [設定] > [保存されたデータ] > [認証済みデータ] でそれらを記憶し、その認証済みユーザーをコミット作成者として使用してファイルをコミットできます。ここで「クリア」をクリックすると、SharpSVN はコミット中に誰を認証するかわかりません。

クラスに次のディレクティブがあるとします。SharpSvn.Security の使用; Windows用のVisualSVNサーバーの無料版を使用しています。そして、私は 2 人のユーザーを持っています。1 人は「user1」という名前で、パスワードは「pass1」で、以下の例では失敗しました。

この例外がスローされないようにするにはどうすればよいですか? (コミットのログで) 作成者に別のユーザーを使用してコミットしますか?

試み #1:

    using (SvnClient client = new SvnClient())
    { 
        client.Authentication.Clear();  // Clear a previous authentication 
        client.Authentication.DefaultCredentials = new System.Net.NetworkCredential("user1", "pass1");

        SvnCommitArgs ca = new SvnCommitArgs();
        ca.LogMessage = "svn log message created at " + DateTime.Now.ToString();
        bool action = client.Commit(@"C:\demo_repo\demo_project\trunk\file.txt", ca);
    }

試み #2:

    using (SvnClient client = new SvnClient())
    {
        client.SetProperty(("", "svn:author", "user1");

        SvnCommitArgs ca = new SvnCommitArgs();
        ca.LogMessage = "svn log message created at " + DateTime.Now.ToString();
        bool action = client.Commit(@"C:\demo_repo\demo_project\trunk\file.txt", ca);
    }

試行 #3:

    using (SvnClient client = new SvnClient())
    {
        client.Authentication.Clear(); // Clear predefined handlers
        client.Authentication.UserNamePasswordHandlers
            += delegate(object obj, SharpSvn.Security.SvnUserNamePasswordEventArgs args)
        {
            args.UserName = "user1";
            args.Password = "pass1";
        }; 

        SvnCommitArgs ca = new SvnCommitArgs();
        ca.LogMessage = "svn log message created at " + DateTime.Now.ToString();
        bool action = client.Commit(@"C:\demo_repo\demo_project\trunk\file.txt", ca);
    }
4

1 に答える 1

2

アプリケーションを管理者として実行したときにスタック トレースを取得した後、フレームワークを使用して例外をキャッチし、信頼されていない証明書の発行者を受け入れることができました。

*未処理の例外: SharpSvn.SvnRepositoryIOException: コミットに失敗しました (詳細は次のとおりです): ===> SharpSvn.SvnRepositoryIOException: URL 'https://mycomputer/svn/demo_repo/demo_project/trunk/file.txt' でリポジトリに接続できません--> SharpSvn.SvnRepositoryIOException: '' のオプション: サーバー証明書の検証に失敗しました: 発行者が信頼されていません (https://mycomputer) --- 内部例外スタック トレースの終了 --- --- 内部例外スタック トレースの終了 - -- SharpSvn.SvnClientArgs.HandleResult(SvnClientContext クライアント、SvnException エラー、オブジェクト ターゲット) で SharpSvn.SvnClientArgs.HandleResult(SvnClientContext クライアント、svn_error_t* エラー、オブジェクト ターゲット) .....*

新しいコード:

            client.Authentication.Clear(); // Clear predefined handlers
            client.Authentication.UserNamePasswordHandlers
                += delegate(object obj, SharpSvn.Security.SvnUserNamePasswordEventArgs args)
            {
                args.UserName = "user1";
                args.Password = "pass1";
            }; 

            client.Authentication.SslServerTrustHandlers​ +=
            delegate(object sender, SvnSslServerTrustEventArgs e)
            {
              e.AcceptedFailures = e.Failures;
              e.Save = true; // Save acceptance to authentication store
            };

            SvnCommitArgs ca = new SvnCommitArgs();
            ca.LogMessage = "svn log message created at " + DateTime.Now.ToString();
            bool action = client.Commit(@"C:\demo_repo\demo_project\trunk\file.txt", ca);
于 2012-10-01T07:21:07.543 に答える