Создание репозитория и фиксация файла с помощью PyGithub

#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. К сожалению, все еще не удалось получить желаемые результаты