Question

Je voudrais ajouter tous les fichiers non parmi un répertoire à SVN à l'aide de sharpsvn.

J'ai d'abord essayé les commandes SVN régulières sur la ligne de commande:

C:\temp\CheckoutDir> svn status -v

Je vois tous les sous-mâles, tous les fichiers qui sont déjà enregistrés, quelques nouveaux fichiers étiquetés "?", Rien avec l'indication de verrouillage "L"

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

Il en résulte que tous les nouveaux fichiers des sous-dimes, qui sont déjà sous le contrôle de version eux-mêmes, à ajouter.

Je voudrais faire de même en utilisant Sharpsvn. Je copie quelques fichiers supplémentaires dans le même répertoire et exécute ce code:

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

Mais un SVNException est soulevé:

  • SvNException.Message: Copie de travail 'C: Temp CheckoutDir' verrouillée
  • SvNException.file: .. .. .. subversion libsvn_wc lock.c "

Aucune autre instance svnclient n'est en cours d'exécution dans mon code, j'ai également essayé d'appeler

svn.cleanup()

Juste avant l'ajout, mais en vain.

Depuis le Documentation est plutôt vague;), je me demandais si quelqu'un ici connaissait la réponse.

Merci d'avance!

Jan

Était-ce utile?

La solution

Utilisez-le mon outil http://svncompletesync.codeplex.com/ ou prenez-le comme un échantillon. Il fait exactement ce dont vous avez besoin.

Autres conseils

J'ai essayé l'outil de Malcolm, mais je n'ai pas pu l'exécuter maintenant qu'il semble avoir quelques années, mais après avoir regardé le code source, il semble que ce soit vraiment tout ce que vous avez besoin pour synchroniser le dossier local vérifié avec le un 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);

Je pense que vous ne devriez pas suffixer le chemin avec un ','. Essayer:

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

Veuillez en discuter davantage sur le forum de discussion / liste de diffusion Sharpsvn, car le comportement que vous voyez pourrait être un bug.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top