SVN Console .NET ошибка - PullRequest
       20

SVN Console .NET ошибка

2 голосов
/ 26 марта 2012

У меня проблема с SVN.

Я создаю приложение в формах .NET 4 для автоматизации нескольких вещей - одна вещь, с которой у меня возникают проблемы, это проверка SVN.

        String RepositoryLocation = GetRepositoryPath();
        String ProjectLocation = GetProjectPath();

        RepositoryLocation = "\"file:///" + RepositoryLocation + "\"";
        ProjectLocation = "\"" + ProjectLocation + "\"";

        System.Diagnostics.Process p = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo ps = new ProcessStartInfo();

        ps.FileName = _svnDirectory + "svn.exe";
        ps.Arguments = @"checkout -r HEAD " + RepositoryLocation + " " + ProjectLocation;
        ps.UseShellExecute = false;
        ps.RedirectStandardError = true;

        p.StartInfo = ps;
        p.Start();

        if (waitForExit == true)
        {
            p.WaitForExit();
        }

        //  test for an error
        String error = p.StandardError.ReadToEnd();

        p.Close();

здесь выдается сообщение об ошибке "svn: e720002: ошибка записи: система не может найти указанный файл".

Похоже, что скрытая папка .svn создается в папке проекта нормально- но ошибка все еще показывает.

Эта установка SVN была установлена ​​с клиентом TortoiseSVN.

SVN версия 1.7.4 TortoiseSVN версия 1.7.6 (вероятно, не требуется)

ОБНОВЛЕНИЕ:

Команда в наборе аргументов:

Файл "checkout \": /// C: / test / test client / repositories / test project / \ "\"C: / test / тестовый клиент / тестовый проект / \ ""

(обратите внимание, что \ "экранирование кавычки допускает пробелы в пути к каталогу)

Ответы [ 3 ]

2 голосов
/ 14 ноября 2012

У меня точно такая же проблема с тобой. Что я сделал, так это проигнорировал любое сообщение об ошибке из svn и выполнил команду 'svn status' в конце. если он возвращает пустую строку, это означает, что все в порядке. Если нет, то есть реальная проблема.

1 голос
/ 05 апреля 2012

Проблема может быть при чтении ошибки StandardError.Вы должны поместить вызов p.StandardError.ReadToEnd(); перед p.WaitForExit(); См. MSDN

Также я бы порекомендовал отличную библиотеку SharpSVN для интерфейса C # для SVN, который делаетне использовать внешний клиент командной строки.

1 голос
/ 02 апреля 2012

Я только что выполнил ваш точный код со следующими предположениями.Работало нормально.Я также создал хранилище в точном каталоге и рабочую копию в том же каталоге, как вы указали.

Я удостоверился, что проверка прошла хорошо, выполнив svn update.Этот вывод тоже ниже.

Пожалуйста, убедитесь, что все нижеприведенное точно соответствует тому, что вы делаете / возвращаете.Если что-то иное, это, возможно, виновник.Если все идентично, возможно, у вас проблемы с разрешением.Можете ли вы попробовать запустить процесс от имени администратора, если у вас есть UAC, запустив Visual Studio от имени администратора?

Обновление SVN

C:\test\test client\test project>svn update
Updating '.':
At revision 0.

Структура папок

C:\
  - test
    - test client
      - test project
      - repositories
        - test project

Код

private const string _svnDirectory = @"C:\Program Files\TortoiseSVN\bin\";

private static String GetRepositoryPath()
{
    return @"C:/test/test client/repositories/test project/";
}

private static String GetProjectPath()
{
    return @"C:/test/test client/test project/";
}
...