Добавить файл используя SharpSVN - PullRequest
5 голосов
/ 08 июня 2009

Я хотел бы добавить все неверсионные файлы в каталоге в 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()

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

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

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

Jan

Ответы [ 3 ]

5 голосов
/ 08 июня 2010

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

2 голосов
/ 02 декабря 2014

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

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

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

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

...