Domanda

Uso la libreria SharpSvn da CollabNET. Vorrei impostare l'autore della revisione durante il commit, ma finisco sempre con un commit con il mio nome utente di Windows.

Questo non funziona per me:

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

Ho provato anche:

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

Ma ho un errore che target (primo argomento) è male.

Quindi potresti dirmi come impostare l'utente (autore) di commit sul repository di sovversione in c #?

È stato utile?

Soluzione

Tutto dipende da come ti connetti al tuo repository, poiché il repository è responsabile dell'aggiunta di un nome utente alla revisione. (Di solito copia le credenziali per le connessioni ma non è necessario).

Quando si utilizza un file: /// repository (che di solito non è raccomandato - Vedi The Subversion Book ) puoi aggirare il problema direttamente sul commit.

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);
}

Se ti connetti a un repository remoto puoi cambiare l'autore di una revisione quando un hook di pre-revprop-change è installato nel repository (Vedi 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] Le versioni SharpSvn più recenti lo consentono anche:

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

Questo ultimo esempio presuppone l'accesso diretto ai file al repository, ma ignora gli hook del repository per prestazioni ottimali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top