Domanda

Vorrei aggiungere tutti i file non inversioni sotto una directory a SVN usando Sharpsvn.

Ho provato prima i normali comandi SVN sulla riga di comando:

C:\temp\CheckoutDir> svn status -v

Vedo tutti i sottoditivi, tutti i file che sono già controllati, alcuni nuovi file etichettati "?", Niente con l'indicazione di blocco "L"

C:\temp\CheckoutDir> svn add . --force

Ciò si traduce in tutti i nuovi file nei sottoditivi, che sono già sotto il controllo della versione da soli, da aggiungere.

Mi piacerebbe fare lo stesso usando Sharpsvn. Copero alcuni file extra nella stessa directory ed eseguo questo codice:

...
using ( SharpSvn.SvnClient svn = new SvnClient() )
{
    SvnAddArgs saa = new SvnAddArgs();
    saa.Force = true;
    saa.Depth = SvnDepth.Infinity;
    try
    {
        svn.Add(@"C:\temp\CheckoutDir\." , saa);
    }
    catch (SvnException exc)
    {
        Log(@"SVN Exception: " + exc.Message + " - " + exc.File);
    }
}

Ma viene sollevato uno svnexception:

  • Svnexception.Message: copia funzionante 'C: temp checkoutdir' bloccato
  • Svnexception.file: .. .. .. Subversion libsvn_wc block.c "

Nessun'altra istanza SvnClient è in esecuzione nel mio codice, ho anche provato a chiamare

svn.cleanup()

Proprio prima dell'aggiunta, ma senza risultati.

Dal documentazione è piuttosto vago;), mi chiedevo se qualcuno qui conoscesse la risposta.

Grazie in anticipo!

Gennaio

È stato utile?

Soluzione

Usa questo mio strumento http://svncompletesync.codeplex.com/ o prendilo come campione. Fa esattamente quello che ti serve.

Altri suggerimenti

Ho provato lo strumento di Malcolm ma non sono riuscito a funzionare ora che sembra avere qualche anno, ma dopo aver guardato il codice sorgente sembra che questo sia davvero tutto ciò che devi usare per sincronizzare la cartella check out locale con il uno in svn:

string _localCheckoutPath = @"C:\temp\CheckoutDir\";
SvnClient client = new SvnClient();

Collection<SvnStatusEventArgs> changedFiles = new Collection<SvnStatusEventArgs>();
client.GetStatus(_localCheckoutPath, out changedFiles);

//delete files from subversion that are not in filesystem
//add files to suversion , that are new in filesystem

foreach (SvnStatusEventArgs changedFile in changedFiles)
{
    if (changedFile.LocalContentStatus == SvnStatus.Missing)
    {
        client.Delete(changedFile.Path);
    }
    if (changedFile.LocalContentStatus == SvnStatus.NotVersioned)
    {
        client.Add(changedFile.Path);
    }
}

SvnCommitArgs ca = new SvnCommitArgs();
ca.LogMessage = "Some message...";

client.Commit(_localCheckoutPath, ca);

Penso che non dovresti suffisso il percorso con a '',. Provare:

svn.Add(@"C:\temp\CheckoutDir" , saa);

Si prega di discuterne ulteriormente nella scheda di discussione/mailing di Sharpsvn, perché il comportamento che stai vedendo potrebbe essere un bug.

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