Добавить файл используя SharpSVN

Я хотел бы добавить все неверсионные файлы в каталоге в SVN, используя SharpSVN.

Сначала я попробовал обычные svn-команды в командной строке:

C:\temp\CheckoutDir> svn status -v

Я вижу все подкаталоги, все файлы, которые уже зарегистрированы, несколько новых файлов с меткой "?", Ничего с индикацией блокировки "L"

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

В результате будут добавлены все новые файлы в подкаталогах, которые уже находятся под контролем версий.

Я хотел бы сделать то же самое, используя SharpSVN. Я копирую несколько дополнительных файлов в тот же каталог и запускаю этот код:

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

Но возникает SvnException:

  • SvnException.Message: рабочая копия "C:\temp\CheckoutDir" заблокирована
  • SvnException.File: ..\..\..\subversion\libsvn_wc\lock.c"

Никакой другой экземпляр svnclient не работает в моем коде, я также пытался вызвать

svn.cleanup()

прямо перед добавлением, но безрезультатно.

Поскольку документация довольно расплывчатая;), мне было интересно, знает ли кто-нибудь здесь ответ.

Заранее спасибо!

январь

3 ответа

Решение

Используйте этот мой инструмент http://svncompletesync.codeplex.com/ или возьмите его в качестве образца. Это именно то, что вам нужно.

Я попробовал инструмент Малкольма, но не смог запустить его сейчас, когда он выглядит как несколько лет, но после просмотра исходного кода кажется, что это действительно все, что вам нужно использовать для синхронизации локальной извлеченной папки с один в 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);

Я думаю, что вы не должны суффикс пути с ','. Пытаться:

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

Пожалуйста, обсудите это дальше в дискуссионной доске / списке рассылки SharpSvn, потому что поведение, которое вы видите, может быть ошибкой.

Другие вопросы по тегам