Как создать и обновить файл в репозитории Github с помощью PHP и Github API?

Я пытаюсь построить функции PHP для создания и обновления файлов в репозитории Github, используя PHP через Github API.

Файлы PHP запускаются со стандартной учетной записи общего хостинга. Поэтому использование фреймворков, которые зависят от установки Composer или других библиотек, для меня не вариант. Так, например, это https://github.com/KnpLabs/php-github-api это не вариант.

До сих пор

Мне удалось получить доступ и список файлов с помощью PHP, используя информацию, приведенную здесь:

Github API Список всех репозиториев и содержимого репо

Я использовал комбинацию 2-го и 6-го ответа (2-й начинается с Вот хороший способ только с завитком. по мясорубке и 6-й ответ с Когда вы говорите «показать репо и его содержимое» Иван Зузак).

Оба перечисляют ясно код и шаги, необходимые для вывода списка файлов и получения содержимого (спасибо @flesheater и @Ivan Zuzak)

Я искал помощь или решения для этого. До сих пор я не нашел ни одного примера, работающего или нет, использующего PHP.

Git API документация

Информация API Git Data (https://developer.github.com/v3/git/) говорит это:

Например, если вы хотите зафиксировать изменение файла в вашем
хранилище, вы бы:

get the current commit object
retrieve the tree it points to
retrieve the content of the blob object that tree has for that particular file path
change the content somehow and post a new blob object with that new content, getting a blob SHA back
post a new tree object with that file path pointer replaced with your new blob SHA getting a tree SHA back
create a new commit object with the current commit SHA as the parent and the new tree SHA, getting a commit SHA back
update the reference of your branch to point to the new commit SHA

Однако нет примеров кода того, как это делается, и я не уверен, что мне нужно ‘commit’ (если я правильно понимаю, это не создание файла, а только контент).

Git Repository API info (https://developer.github.com/v3/repos/contents/#create-a-file):

Часть «Создать файл» показывает метод для этого, но без примеров кода. Я уверен, как или если это может быть использовано программно.

Github API Обновить файл

Похожие темы

По моему мнению, никто не предлагает достаточно ясности или информации, чтобы обеспечить решение, из-за вопросов или ответов. Поэтому я не думаю, что это дубликат.

Как создать коммит и запустить репо с помощью GitHub API v3?

В этой теме есть два ответа. Одна из них — это просто ссылка на Github API, в которой нет примеров кода. Другое решение Pearl (казалось бы), но использует отдельную конструкцию Pearlframe. Так что даже попытка преобразовать показанный Pearl нецелесообразна.

Как создать репозиторий GitHub и загружать файлы из PHP?

Ответ только повторяет другой поток, что BLOB-объект должен быть создан. Но это только самое начало того, что действительно необходимо для создания / обновления файла через Github API. В этом потоке есть пример Python, но для этого примера нужна отдельная платформа Pearl.

GitHub API — написать в репо

Это тема, связанная с. На него отвечает пользователь, который разместил не очень понятный вопрос, но без каких-либо подробностей или ясности.

2

Решение

Похоже, исследования окупились, и я могу ответить на основную часть моего собственного вопроса (который я не ожидал сделать) — создание нового файла. Похоже, тот же подход будет полезен для обновления существующего файла (если нет, я вернусь).

Эта ссылка помогла: http://www.lornajane.net/posts/2009/putting-data-fields-with-php-curl

Я понял путь, указанный в документации по Github API (https://developer.github.com/v3/repos/contents/#get-contents) — раздел Создать файл — может быть использован как URL для curl как:

https://api.github.com/repos/ USER / REPO_NAME /contents/ FILENAME

И некоторые настройки были необходимы для отправки JSON. Итак, теперь у меня есть:

$curl_url = $url
$curl_token_auth = 'Authorization: token ' . $token;
$ch = curl_init($curl_url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'User-Agent: $username', $curl_token_auth ));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response);

return $response;

Для $ data я использовал пример JSON со страницы API Github:

{
"message": "my commit message",
"committer": {
"name": "Mike A",
"email": "[email protected]"},
"content": "bXkgbmV3IGZpbGUgY29udGVudHM="}

После реализации этого в файле PHP (на виртуальном хостинге), без использования каких-либо других фреймворков, я увидел новый файл в репозитории Github.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]