Подтвердить что ты не робот

Как создать фиксацию и нажать на репо с GitHub API v3?

Я хочу создать репозиторий и скопировать несколько файлов через любой пакет Python. Как мне сделать?

Я не понимаю, как добавлять файлы для фиксации.

4b9b3361

Ответ 1

Вы можете узнать, может ли помочь обновить API-интерфейс GitHub CRUD (май 2013 г.).

API содержимого репозитория позволяет некоторое время читать файлы. Теперь вы можете легко вносить изменения в отдельные файлы, как вы можете в веб-интерфейсе.

Начиная с сегодняшнего дня, эти методы доступны вам:

Ответ 2

Github предоставляет Git API базы данных, который дает вам доступ к чтению и записи необработанных объектов, а также к списку и обновлению ссылок (заголовков ветвей и тегов). Чтобы лучше понять эту тему, я настоятельно рекомендую вам прочитать Git Internals главу книги Pro Git.

Согласно документации, это процесс с 7 шагами для фиксации изменения файла в вашем репозитории:

  • получить текущий объект фиксации
  • получить дерево, на которое указывает
  • получить содержимое объекта blob, которое имеет дерево для данного пути к файлу
  • каким-то образом измените содержимое и опубликуйте новый объект blob с этим новым контентом, получив обратную связь SHB обратно.
  • разместите новый объект дерева с указанным указателем пути к файлу, заменив его новым блоком SHA, получившим дерево SHA назад.
  • создать новый объект фиксации с текущим фиксатором SHA в качестве родителя и нового SHA дерева, получить фиксацию SHA
  • обновите ссылку своей ветки, чтобы указать на новую команду SHA

Этот блог отлично справляется с объяснением этого процесса с помощью Perl. Для реализации python вы можете использовать PyGithub библиотеку.

Ответ 3

Вот полный фрагмент:

def push_to_github(filename, repo, branch, token):
    url="https://api.github.com/repos/"+repo+"/contents/"+filename

    base64content=base64.b64encode(open(filename,"rb").read())

    data = requests.get(url+'?ref='+branch, headers = {"Authorization": "token "+token}).json()
    sha = data['sha']

    if base64content.decode('utf-8')+"\n" != data['content']:
        message = json.dumps({"message":"update",
                            "branch": branch,
                            "content": base64content.decode("utf-8") ,
                            "sha": sha
                            })

        resp=requests.put(url, data = message, headers = {"Content-Type": "application/json", "Authorization": "token "+token})

        print(resp)
    else:
        print("nothing to update")

token = "lskdlfszezeirzoherkzjehrkzjrzerzer"
filename="foo.txt"
repo = "you/test"
branch="master"

push_to_github(filename, repo, branch, token)

Ответ 4

Я нахожусь на Google App Engine (GAE), так что помимо python я могу create новый файл update it, даже удалить его через фиксацию и нажать на мое репо в GitHub с GitHub API v3 в php, java и go.

Проверка и просмотр некоторых доступных сторонних сторон libraries для создания как пример script, который представлен в perl, я бы рекомендовал использовать следующее:

Как вы знаете, вы можете получить один сайт на учетную запись и организацию GitHub и неограниченные сайты проектов, на которых веб-сайты размещаются непосредственно из вашего репо и поддерживаются Jekyll по умолчанию.

Сочетание Jekyll, Webhooks и API GitHub Script в GAE, а также соответствующую настройку GAE, она даст вам широкие возможности, такие как вызов внешнего script и создать динамическую страницу в GitHub.

Помимо GAE, есть также возможность запускать его на Heroku. Используйте JekyllBot, который живет на (бесплатном) экземпляре Heroku для тихо генерирует файлы JSON для каждого сообщения и отбрасывает изменения обратно в GitHub.