Pergunta

Gostaria de adicionar todos os arquivos não versionados em um diretório ao SVN usando o Sharpsvn.

Eu tentei comandos SVN regulares na linha de comando primeiro:

C:\temp\CheckoutDir> svn status -v

Eu vejo todos os subdirs, todos os arquivos que já foram verificados, alguns novos arquivos rotulados "?", Nada com a indicação de bloqueio "L"

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

Isso resulta em todos os novos arquivos nos subdirs, que já estão sob controle da versão, a serem adicionados.

Eu gostaria de fazer o mesmo usando Sharpsvn. Copio alguns arquivos extras no mesmo diretório e execute 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);
    }
}

Mas uma SvNexception é levantada:

  • SvNexception.Message: Copiar de trabalho 'C: Temp checkoutdir' bloqueado
  • SvNexception.File: .. .. .. subversão libsvn_wc Lock.c "

Nenhuma outra instância do SvnClient está em execução no meu código, eu também tentei ligar

svn.cleanup()

Logo antes do add, mas sem sucesso.

Desde o documentação é bastante vago;), eu queria saber se alguém aqui sabia a resposta.

Desde já, obrigado!

Jan

Foi útil?

Solução

Use esta minha ferramenta http://svncompletesync.codeplex.com/ ou tome -o como uma amostra. Faz exatamente o que você precisa.

Outras dicas

I tried Malcolm's tool but couldn't get it to run now that it looks to be a few years old, but after looking at the source code it looks like this is really all you need to use to sync the local checked out folder with the one 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);

I think you shouldn't suffix the path with a ','. Try:

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

Please do discuss this further on the SharpSvn discussion board/mailing list, because the behavior you are seeing might be a bug.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top