Pregunta

Me gustaría agregar todos los archivos no versionados en un directorio a SVN usando SharpSVN.

Probé los comandos SVN regulares en la línea de comando primero:

C:\temp\CheckoutDir> svn status -v

Veo todos los subdirs, todos los archivos que ya se registran, algunos archivos nuevos etiquetados "?", Nada con la indicación de bloqueo "L"

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

Esto da como resultado todos los archivos nuevos en los Subdirs, que ya están bajo control de versiones en sí mismos, que se agregarán.

Me gustaría hacer lo mismo usando SharpSVN. Copio algunos archivos adicionales en el mismo directorio y ejecuto este código:

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

Pero se plantea una SVNException:

  • Svnexception.message: copia de trabajo 'c: temp checkoutdir' bloqueado
  • Svnexception.file: .. .. .. subversion libsvn_wc list.c "

Ninguna otra instancia de SvnClient se está ejecutando en mi código, también intenté llamar

svn.cleanup()

Justo antes del agregado, pero fue en vano.

Desde el documentación es bastante vago;), me preguntaba si alguien aquí sabía la respuesta.

¡Gracias por adelantado!

Ene

¿Fue útil?

Solución

Usa esto mi herramienta http://svncompletesync.codeplex.com/ o tómalo como una muestra. Hace exactamente lo que necesitas.

Otros consejos

Probé la herramienta de Malcolm, pero no pude hacer que se ejecute ahora que parece tener unos años, pero después de mirar el código fuente, parece que esto es realmente todo lo que necesita usar para sincronizar la carpeta de revisión local con el uno en 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);

Creo que no deberías sufijar el camino con un ','. Probar:

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

Discuta esto más en el tablero de discusión/lista de correo de SharpSVN, porque el comportamiento que está viendo podría ser un error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top