Как использовать git pull для извлечения данных, используя php exec - PullRequest
0 голосов
/ 30 апреля 2020

Код, который я пытался вытащить:

shell_exec('git init');
$d = shell_exec('git fetch origin master');
$output = shell_exec('git pull origin master');

Но он работает не так, как ожидалось. Иногда это работает, а иногда нет.

В моей учетной записи git включена двухфакторная аутентификация. Как вы думаете, в чем причина?

или нужно что-то еще сделать, чтобы получить данные?

Ответы [ 5 ]

1 голос
/ 08 мая 2020

код, который вы написали, создает новый репозиторий в текущем рабочем каталоге и затем пытается извлечь / извлечь из удаленного origin, но ни один из них не был настроен.

вам нужно добавить что-то похожее на shell_exec("git remote add origin GIT_URL"); где GIT_URL - это удаленный URL вашего репозитория


, также вы не проверяете ошибки, возможно, попробуйте его с помощью exec system или proc_*, чтобы иметь возможность увидеть обнаружение сбоев и отменить при необходимости

0 голосов
/ 09 мая 2020

Я не хочу вести себя так, как будто я троллю, но: 1-й: Изучите рабочий процесс git - вам нужно будет клонировать свой репозиторий, затем проверить мастер, затем git потянуть. Если вы сделали это один раз - вы больше не должны использовать «git клон», только мастер проверки и сделайте git тягу. 2-й: Вам нужно установить ключ sh на PHP - я бы этого не делал, но это ваша вещь. Использование двухфакторной аутентификации никак не связано с проблемой, которую вы пытаетесь решить. Просто используйте S SH URL от Github для клонирования вашего хранилища и убедитесь, что PHP может получить доступ к вашему ключу S SH, чтобы он мог аутентифицироваться на github.

0 голосов
/ 09 мая 2020

Вы должны иметь origin (удаленное хранилище) перед началом выборки. Вы пропустили команду git remote add origin URL после инициализации в хранилище в локальной машине. Кроме того, если вы создали пустой sh пустой репозиторий при локальной обработке, вам сначала потребуется клонировать существующий удаленный репозиторий. Вот как вы можете клонировать репозиторий с удаленного сервера.

$repo = 'YOUR_REPOSITORY_URL_HERE';
shell_exec('git clone '.$repo);
shell_exec('git remote add origin '.$repo);
$d = shell_exec('git fetch origin master');
$output = shell_exec('git pull origin master');

убедитесь, что репозиторий не является частным, иначе вам потребуется s sh для подключения к удаленному серверу. .

Я предлагаю вам не go путем переизобретения weel. Вы можете использовать библиотеку git - php, чтобы сделать код беспроблемным.

0 голосов
/ 06 мая 2020

Используйте system() вместо shell_exe c

Вы также можете сделать

$escaped_cmd = escapeshellcmd($command);
system($escaped_cmd);

, если вы параноик

0 голосов
/ 02 мая 2020

Это должно работать, используя czproject/git-php и его pull функцию :

$repo = GitRepository::init('gitrepo');
$repo->pull('https://url/remote/repo', array('master')); 

Таким образом, вы явно указываете удаленный URL.

...