Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
97 / 97 / 17
Регистрация: 18.10.2009
Сообщений: 453
1

exec и git

11.10.2013, 11:14. Показов 1993. Ответов 6
Метки нет (Все метки)

Здравствуйте.
Столкнулся с такой проблемой: функция exec не запускает команду git reset.

Пример:
PHP
1
2
3
4
5
6
7
8
exec("git reset", $Output, $Return);
var_dump($Output, $Return);
/*
array (size=0)
  empty
 
int 128
*/
Возвращает пустой результат, и код ошибки 128. НаГУГЛить ничего не получаеться...
В командной строке, если писать руками, все работает без проблем.
С путями проблем нет, exec("ls", $Output, $Return) - это подтверждает. Пробовал как относительные так и абсолютные пути, результат тотже.
ОС Fedora, SELinux - отключен.

Если попробовать, другие команды, все работает гуд, например git status:
PHP
1
2
3
4
5
6
7
8
9
10
exec("git status", $Output, $Return);
var_dump($Output, $Return);
/*
array (size=8)
  0 => string '# On branch master' (length=18)
  ...
  7 => string 'no changes added to commit (use "git add" and/or "git commit -a")' (length=65)
 
int 0
*/
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2013, 11:14
Ответы с готовыми решениями:

Ошибка in execfile exec(compile(contents+"\n", file, 'exec'), glob, loc)
Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\Program...

Команда $git init создает .git не в той папке
Привет. Не нашел на форуме раздела, где мог бы задать вопрос по работе git, пишу поэтому сюда....

Чем отличается git merge От git pull
в обоих случаях я забираю изменения в свою ветку. в чем различие?

fatal not a git repository (or any of the parent directories) .git
Вылетает такая ошибка, на всех проектах: fatal not a git repository (or any of the parent...

6
PHP developer
259 / 157 / 26
Регистрация: 20.03.2013
Сообщений: 1,017
11.10.2013, 16:50 2
Цитата Сообщение от Pafos Посмотреть сообщение
Здравствуйте.
Столкнулся с такой проблемой: функция exec не запускает команду git reset.
имхо Вы пытаете запустить не полную команду:
PHP
1
2
exec("git reset --HARD", $Output, $Return); // или git reset HEAD file.html
var_dump($Output, $Return);
Попробуйте так.

Да гит сам говорит как команду необходимо использовать:

use "git reset HEAD <file>..." to unstage
1
97 / 97 / 17
Регистрация: 18.10.2009
Сообщений: 453
11.10.2013, 16:53  [ТС] 3
Решил проблему...
Проблема была в правах директорий...
Bash
1
chmod o+rw -R git_directory
0
13201 / 6588 / 1040
Регистрация: 10.01.2008
Сообщений: 15,069
11.10.2013, 17:16 4
Цитата Сообщение от Pafos Посмотреть сообщение
функция exec не запускает команду git reset.
Если Вы получили в ответ код завершения - значит запускает. Проблема в том, что Вы не можете получить вывода, направленного запускаемой программой в поток ошибок, и увидеть суть проблемы.
1
97 / 97 / 17
Регистрация: 18.10.2009
Сообщений: 453
11.10.2013, 17:23  [ТС] 5
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Проблема в том, что Вы не можете получить вывода, направленного запускаемой программой в поток ошибок, и увидеть суть проблемы.
Vovan-VE, не доконца понял... почему так? Можно ли решить как-то данный вопрос?
0
13201 / 6588 / 1040
Регистрация: 10.01.2008
Сообщений: 15,069
11.10.2013, 17:37 6
Цитата Сообщение от Pafos Посмотреть сообщение
не доконца понял... почему так?
Есть потоки ввода (STDIN), вывода (STDOUT) и вывода ошибок (STDERR). При нормальном запуске из терминала по умолчанию и STDOUT, и STDERR направлены в этот же терминал, поэтому в терминале Вы видите глазами сообщения об ошибках, если они есть.
Bash
$ git status
fatal: Not a git repository ...
$ echo $?
128
$ _
Добавьте редирект для потока ошибок - получится как раз то, что Вы получаете в коде в первом посте:
Bash
$ git status 2>/dev/null
$ echo $?
128
$ _
Если Вы запустите свой код в консольном PHP, то дочерний процесс git получит для STDERR хендл того же терминала, поэтому Вы точно так же увидите ошибку в терминале:
Bash
$ php -r 'exec("git status", $a, $b); var_dump($a, $b);'
fatal: Not a git repository ...
array(0) {
}
int(128)
$ _
Добавьте редирект самому php - получится тот же эффект:
Bash
$ php -r 'exec("git status", $a, $b); var_dump($a, $b);' 2>/dev/null
array(0) {
}
int(128)
$ _
Если Вы делаете это не с консольном PHP, а из-под веб-сервера, то само собой, ошибки уходят практически в никуда. Используя функцию exec(), насколько мне известно, Вы никак не можете дать дочернему процессу другой хендл в STDERR, из которого Вы могли бы прочитать ошибки и что-то с ними сделать.
1
97 / 97 / 17
Регистрация: 18.10.2009
Сообщений: 453
12.10.2013, 13:29  [ТС] 7
Vovan-VE, все понятно, спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2013, 13:29

fatal: Not a git repository (or any of the parent directories): .git
Подключил EGit для разработки командных проектов ... Теперь при запуске программ хранящихся на...

Not a git repository or any of the parent directories git
Всем привет. Случилось нечто досадное. Я закончил работу в локальной ветке и перешел в мастер,...

Почему git add . и git add * это плохо? И как тогда быть?
Вопрос по гиту, почему git add . и git add * это плохо? и как тогда быть?

exec
Создаю новый процес и открываю программу execl(&quot;./dauther&quot;,NULL,NULL); , обьясните пожалусто как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru