воскресенье, 6 октября 2013 г.

Ошибка Git при импорте из Subversion: Permission denied: Can't open '/tmp/report.tmp': Permission denied at /usr/lib/perl5/site_perl/Git/SVN.pm line 1210

При импорте локального репозитория из Subversion в Git существует маленькая проблема: при запуске команды git svn clone получаем ошибку:
Permission denied: Can't open '/tmp/report.tmp': Permission denied at /usr/lib/perl5/site_perl/Git/SVN.pm line 1210

Очень странно, что разработчики не стали устранять эту ошибку. Обойти эту ошибку можно следующим образом.

Для этого потребуется (желательно) последняя версия TortoiseSVN.
1. Если TortoiseSVN уже установлена, то переходим к шагу (3). Иначе (2).
2. Качаем последнюю версию TortoiseSVN и распаковываем этот файл (как это сделать).
Скорее всего потребуется скопировать файлы из <папка распаковки>\SourceDir\Program Files\TortoiseSVN\Win\System64 (для x64 версии TortoiseSVN) или System (для x86 версии TortoiseSVN) в <папка распаковки>\SourceDir\Program Files\TortoiseSVN\bin.
3. Запускаем интерпретатор командной строки и переходим в папку TortoiseSVN\bin:
cd "c:\Program Files\TortoiseSVN\bin"
cd "<папка распаковки>\SourceDir\Program Files\TortoiseSVN\bin"
4. Запускаем сервер Subversion с помощью команды:
svnserve.exe -X --root d:\path\to\svn\repo
5. Запускаем процесс импортирования в Git shell:
mkdir /path/to/git/repo
git svn clone svn://localhost/ /path/to/git/repo
и видим, что процесс успешно выполняется


По завершению импорта сервер Subversion автоматически прекратит работу. Если нужно изменить настройки импорта, то процесс повторяется с шага 4.

Для простоты я использую следующий командный файл:
@echo off

if "%1" == "" (
 set SVN_REPO=d:\Projects\VCS\Subversion
) else (
 set SVN_REPO=%1
)
echo use repo at %SVN_REPO%

set ROOT_DIR=%~dp0
if not exist "%ROOT_DIR%unpack" (
 for /F "delims=" %%i IN ('dir /b TortoiseSVN-*.msi') do (
  msiexec /a %%i /qb TARGETDIR="%ROOT_DIR%unpack"
  copy "%ROOT_DIR%unpack\Program Files\TortoiseSVN\Win\System64\*.*" "%ROOT_DIR%unpack\Program Files\TortoiseSVN\bin"
 )
)
"%ROOT_DIR%unpack\Program Files\TortoiseSVN\bin\svnserve.exe" -X --root %SVN_REPO%
pause
Запишите его в тут папку, где находится файл установки TortoiseSVN. При необходимости модифицируйте имя путь по умолчанию к репозиторию Subversion или задайте его как параметр файла.

2 комментария:

  1. В строчке 11 обратный слеш после %ROOT_DIR% есть, а вот в строчках 13,14,17 его нет, получается если переменная %ROOT_DIR% заканчивается на \ то скрипт сработает, а в противном случае не сработает.

    ОтветитьУдалить
    Ответы
    1. Согласен, что есть некоторая несогласованность. Поскольку %~dp0 всегда даёт каталог с \ на конце, поэтому убираю его в строке 11.
      Спасибо!

      Удалить