Работа с репозиторием 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()