Ошибки командной строки SVN переходят в stderr, а не в stdout, поэтому вы их не видите. Вам нужно перенаправить stderr в stdout, а затем print_r($output)
, чтобы определить причину ошибки.
exec('svn commit <stuff> 2>&1', $output, $returnStatus);
if ( $returnStatus )
{
print_r($output);
}
Пример вывода:
Array
(
[0] => svn: Commit failed (details follow):
[1] => svn: '/path/to/<stuff>' is not under version control
)
Это не идеально, потому что он смешивает stderr с stdout, когда это было бы ненужным, но я не знаю другого способа получить желаемый результат в этом случае. Если кто-то другой, пожалуйста, прокомментируйте.
Примечание: Третий параметр exec (...) - это возвращаемое состояние , а не сообщение об ошибке, поэтому вам нужно настроить код соответственно и для этого.
Если вывод ошибки после внесения изменения 2>&1
не поможет устранить основную причину вашей проблемы, пожалуйста, опубликуйте новый вывод здесь.
Изменить после новой информации:
Вы загрузили эту рабочую копию SVN на свой сервер откуда-то еще? Это объясняет эту ошибку.
Если я извлекаю рабочую копию из локального репозитория, загружаю ее на свой удаленный сервер и затем пытаюсь зафиксировать, я получаю ту же ошибку.
Если это так, вам необходимо выполнить «svn checkout» рабочей копии на сервере, на котором выполняется PHP-скрипт , чтобы иметь возможность зафиксировать его. Если этот сервер не может связаться с сервером хранилища, тогда это совсем другая проблема.