Работа с репозиторием GitHub Wiki с использованием Python

Есть ли способ программно (используя такие библиотеки, как PyGithub, GitPython или же dulwich) загрузить любой файл прямо в MyRepo.wiki.git хранилище? Использование Python, конечно.

Я могу легко загрузить файл прямо в MyRepo.git хранилище с помощью PyGithub, но, к сожалению, эта библиотека не имеет API или способов работы с MyRepo.wiki.git репозиторий.

Вот как я могу загрузить файл в MyRepo.git репозиторий:

github_repo = github_account.get_user().get_repo('MyRepo')

head_ref = gh_repo.get_git_ref("heads/%s" % github_branch)
latest_commit = gh_repo.get_git_commit(head_ref.object.sha)

base_tree = latest_commit.tree

new_tree = gh_repo.create_git_tree(
    [github.InputGitTreeElement(
        path="test.txt",
        mode='100755' if github_executable else '100644',
        type='blob',
        content="test"
    )],
    base_tree)

new_commit = gh_repo.create_git_commit(
    message="test commit message",
    parents=[latest_commit],
    tree=new_tree)

head_ref.edit(sha=new_commit.sha, force=False)

Итак, как я могу сделать то же самое, но с MyRepo.wiki.git хранилище? Если вы можете привести пример с использованием библиотеки PyGithub - это было бы здорово.

PS Могу ли я сделать это с помощью Gollum API?

PPS никто не работал с *.wiki.git используя какую-либо библиотеку Python? Я не верю:(

PPPS Если я не совсем ясно: я НЕ хочу создавать локальный репозиторий каким-либо образом. Все, что я хочу на лету изменить структуру репо - как это делает мой пример. Но с *.wiki.git хранилищем.

Спасибо!

1 ответ

Решение

Вы не можете получить доступ к вики-сайту github через веб-API github, который PyGithub использует исключительно. Но вы можете указать свой GitPython на git URL вики. После этого вы можете получить доступ к файлам в этом git-репо, как и в любом другом репо.

отредактированный

Как вы указали, что вы ограничиваете себя, чтобы не создавать локальный клон репозитория git, я рекомендую следующее:

Прочитайте код в https://github.com/github/gollum/blob/master/lib/gollum/frontend/app.rb который определяет, возможно, весь внешний интерфейс HTTP.

Прекрасной обертки вокруг него для Python не существует. Но когда вы делаете один (частично), я рекомендую использовать клиентскую библиотеку REST, как упомянуто здесь: https://stackru.com/questions/2176561/which-is-the-best-python-library-to-make-rest-request-like-put-get-delete-pos

Если вы сейчас думаете, что ваше ограничение может быть изменено:

Документация предоставляет хороший учебник, охватывающий все необходимое с небольшим знанием git. Это сводится к:

import git
repo = git.Repo.clone_from("git@github.com:user/project.wiki.git", "some-path")
repo.index.add(["your-new-file"])
repo.index.commit("your message to the world")
repo.remotes.origin.push()
Другие вопросы по тегам