Вопрос

Я хотел бы добавить все неверсированные файлы в каталог в 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 cakeoutdir' заблокирован
  • Svnexception.file: .. .. .. subversion libsvn_wc lock.c "

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

svn.cleanup()

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

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

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

Январь

Это было полезно?

Решение

Используйте это мой инструмент 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/рассылки, потому что поведение, которое вы видите, может быть ошибкой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top