Назад | Перейти на главную страницу

Subversion COPY / MOVE - Файл не найден: транзакция «XXX-XX»

Я пытаюсь создать ветку в одном из моих репозиториев 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.