Я хочу создать репозиторий и скопировать несколько файлов через любой пакет Python. Как мне сделать?
Я не понимаю, как добавлять файлы для фиксации.
Я хочу создать репозиторий и скопировать несколько файлов через любой пакет Python. Как мне сделать?
Я не понимаю, как добавлять файлы для фиксации.
Вы можете узнать, может ли помочь обновить API-интерфейс GitHub CRUD (май 2013 г.).
API содержимого репозитория позволяет некоторое время читать файлы. Теперь вы можете легко вносить изменения в отдельные файлы, как вы можете в веб-интерфейсе.
Начиная с сегодняшнего дня, эти методы доступны вам:
Github предоставляет Git API базы данных, который дает вам доступ к чтению и записи необработанных объектов, а также к списку и обновлению ссылок (заголовков ветвей и тегов). Чтобы лучше понять эту тему, я настоятельно рекомендую вам прочитать Git Internals главу книги Pro Git.
Согласно документации, это процесс с 7 шагами для фиксации изменения файла в вашем репозитории:
- получить текущий объект фиксации
- получить дерево, на которое указывает
- получить содержимое объекта blob, которое имеет дерево для данного пути к файлу
- каким-то образом измените содержимое и опубликуйте новый объект blob с этим новым контентом, получив обратную связь SHB обратно.
- разместите новый объект дерева с указанным указателем пути к файлу, заменив его новым блоком SHA, получившим дерево SHA назад.
- создать новый объект фиксации с текущим фиксатором SHA в качестве родителя и нового SHA дерева, получить фиксацию SHA
- обновите ссылку своей ветки, чтобы указать на новую команду SHA
Этот блог отлично справляется с объяснением этого процесса с помощью Perl. Для реализации python вы можете использовать PyGithub библиотеку.
Вот полный фрагмент:
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)
Я нахожусь на 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.
Мне было интересно об этом, но не нашли решения, которые работают с V3 API.
Однако я написал сообщение в блоге вместе с кодом о том, как это сделать, используя node.js