Я пытаюсь создать ветку в одном из моих репозиториев Subversion и продолжаю сталкиваться с ошибкой. Независимо от того, что сделано, я получаю следующее:
Файл не найден: транзакция '3062-2e6', путь '/ Software / XXXXXX / branch / testbranch'
Я заметил, что первая часть «3063-3e6» в приведенном выше сообщении - это последняя успешно зафиксированная ревизия в репозитории. Мои журналы apache не дают больше информации:
[Wed Nov 24 14:10:38 2010] [error] [client x.x.x.x] Could not MOVE/COPY /svn/p070361/!svn/bc/3049/Software/SXXXXXX/trunk. [404, #0]
[Wed Nov 24 14:10:38 2010] [error] [client x.x.x.x] Unable to make a filesystem copy. [404, #160013]
[Wed Nov 24 14:10:38 2010] [error] [client x.x.x.x] File not found: transaction '3059-2e2', path '/Software/XXXXXX/branches/testbranch' [404, #160013]
Все это происходит на сервере с интерфейсом nginx, который проксирует Apache для битов подрывной деятельности. Другие репозитории могут нормально ветвиться, и я смог создать ветвь, используя file: /// из командной строки на сервере, на котором это происходит. Разрешения для этого репозитория соответствуют всем остальным репозиториям, и место на диске не является проблемой.
Вероятно, в вашей структуре svn нет каталога «Software / XXXXXX / branch», он должен существовать, чтобы создать здесь «testbranch». Вы должны сделать этот каталог («ветки») руками, а затем сделать ветку.
Это бесполезное сообщение об ошибке может возникнуть, если подкаталоги на пути назначения еще не существуют. Хотя вы можете создавать их вручную (с svn mkdir
) проще использовать --parents
вариант.
svn cp ^/trunk/bigproject ^/branches/experimental/bigproject -m 'test branch'
Если branches
или experimental
не существует, то команда завершится ошибкой. Это должно работать:
svn cp --parents ^/trunk/bigproject ^/branches/experimental/bigproject -m 'test branch'
У нас была точно такая же проблема, и жаль, что здесь только бесполезные ответы.
Это не проблема svn, это проблема nginx. Как упоминалось в комментарии OP, это связано с пробелами (или другими символами, которые требуют кодирования URL-адреса) в пути. Происходит чрезмерное кодирование, так что путь неверный, когда он достигает svn.
Старая открытая ошибка в nginx
Но в правиле перезаписи nginx есть обходной путь, позволяющий избежать этой дополнительной неправильной кодировки:
Произошла неправильная кодировка:
if ( $http_destination ~* ^(.*)$ )
{
set $fixed_destination $1;
}
без дополнительной кодировки:
if ( $http_destination ~* ^(?<fix>.*)$ )
{
set $fixed_destination $fix;
}
Решение здесь - использовать названная группа, это разница, которая заставляет nginx вести себя по-другому в этом случае, но мы не нашли никакой документации, объясняющей это.
Я знаю, что это не прямой ответ на ваши проблемы, но если вы хотите эффективно работать с ветками, вам следует подумать об использовании других систем контроля версий, таких как git, mercurial или bazzar.
Или, если вы не хотите выполнять полную миграцию, вы можете использовать git-svn как «интерфейс» для вашего репозитория svn, я рекомендую вам прочитать этот чтобы узнать больше о git-svn.