#python #git #google-colaboratory #pygithub
#python #git #google-совместная лаборатория #pygithub
Вопрос:
Я видел тему фиксации с использованием PyGithub во многих других вопросах здесь, но ни один из них мне не помог, я не понял решений, я думаю, я слишком новичок.
Я просто хочу зафиксировать файл со своего компьютера в тестовом репозитории github, который я создал. Пока я тестирую с помощью Google Collab notebook.
Это мой код, вопросы и проблемы в комментариях:
from github import Github
user = '***'
password = '***'
g = Github(user, password)
user = g.get_user()
# created a test repository
repo = user.create_repo('test')
# problem here, ask for an argument 'sha', what is this?
tree = repo.get_git_tree(???)
file = 'content/echo.py'
# since I didn't got the tree, this also goes wrong
repo.create_git_commit('test', tree, file)
Ответ №1:
sha
Это хэш контрольной суммы из 40 символов, который функционирует как уникальный идентификатор идентификатора фиксации, который вы хотите получить ( sha
также используется для идентификации других объектов Git).
Из документов:
Каждый объект однозначно идентифицируется двоичным хэшем SHA1 размером 20 байт или 40 байт в шестнадцатеричной системе счисления. Git знает только 4 различных типа объектов: большие двоичные объекты, деревья, коммиты и теги.
Главный коммит sha
доступен через:
headcommit = repo.head.commit
headcommit_sha = headcommit.hexsha
Или фиксация главной ветви доступна через:
branch = repo.get_branch("master")
master_commit = branch.commit
Вы можете просмотреть все свои существующие ветки через:
for branch in user.repo.get_branches():
print(f'{branch.name}')
Вы также можете просмотреть sha
нужную вам ветку в репозитории, который вы хотите получить.
get_git_tree
Принимает указанный sha
идентификатор и возвращает github.GitTree.GitTree
из документов:
Объект Git tree создает иерархию между файлами в репозитории Git
Вы найдете много более интересной информации в руководстве docs.
Код для создания репозитория и фиксации нового файла в нем в Google CoLab:
!pip install pygithub
from github import Github
user = '****'
password = '****'
g = Github(user, password)
user = g.get_user()
repo_name = 'test'
# Check if repo non existant
if repo_name not in [r.name for r in user.get_repos()]:
# Create repository
user.create_repo(repo_name)
# Get repository
repo = user.get_repo(repo_name)
# File details
file_name = 'echo.py'
file_content = 'print("echo")'
# Create file
repo.create_file(file_name, 'commit', file_content)
Комментарии:
1. Привет! Как мне получить sha с помощью PyGithub?
2. Привет @EduardoValentindosSantos, добавлены дополнительные пояснения
3. Привет, есть проблема с частью headcommit, моя программа обвиняет объект ‘Repository’ в отсутствии атрибута ‘head’
4. @EduardoValentindosSantos Может быть, они это называют
master
, добавил больше объяснений.5. К сожалению, все еще не удалось получить желаемые результаты