web-dev-qa-db-ja.com

GitHub API v3でコミットを作成してリポジトリにプッシュする方法は?

リポジトリを作成し、任意のPythonパッケージを介してリポジトリにいくつかのファイルをコミットしたい。どうすればよいですか?

コミット用のファイルを追加する方法がわかりません。

18
Denis SkS

新しいアップデートが役立つかどうかを確認できます GitHub CRUD API(2013年5月)

リポジトリコンテンツAPI は、しばらくの間ファイルの読み取りを許可しています。これで、Web UIの場合と同じように、単一のファイルに変更を簡単にコミットできます。

本日より、次の方法をご利用いただけます。

11
VonC

Githubは GitデータベースAPI を提供します。これにより、生のオブジェクトの読み取りと書き込み、および参照(ブランチヘッドとタグ)の一覧表示と更新にアクセスできます。このトピックをよりよく理解するために、Pro Gitブックの Git Internals の章を読むことを強くお勧めします。

ドキュメントによると、リポジトリ内のファイルに変更をコミットするのは7つのステップのプロセスです。

  1. 現在のコミットオブジェクトを取得します
  2. それが指すツリーを取得します
  3. その特定のファイルパスに対してツリーが持つblobオブジェクトのコンテンツを取得します
  4. なんらかの方法でコンテンツを変更し、その新しいコンテンツで新しいblobオブジェクトを投稿して、blob SHA back
  5. そのファイルパスポインタを新しいblobに置き換えて新しいツリーオブジェクトを投稿するSHAツリーを取得するSHA back
  6. 現在のコミットSHAを親とし、新しいツリーSHAとして、コミットを取得して新しいコミットオブジェクトを作成しますSHA back
  7. 新しいコミットSHAを指すようにブランチの参照を更新します

このブログ Perlを使用してこのプロセスを説明するのに素晴らしい仕事をしています。 python実装の場合、 PyGithub ライブラリを使用できます。

6
Jai Pandya

完全なスニペットは次のとおりです。

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)
6

私はGoogle App Engine(GAE)を使用しているので、Pythonのほかに create 新しいファイル、 pdate it、さらに delete it コミットを介してGitHubのリポジトリにプッシュします GitHub API v in php、Javaそして行きます。

利用可能なサードパーティのいくつかをチェックしてレビューする ライブラリ Perlで提示された サンプルスクリプト のように作成するには、以下を使用することをお勧めします。

ご存知のように、GitHubアカウントと組織ごとに1つのサイトを取得できます。また、無制限のプロジェクトサイトを取得できます。このサイトでは、Webサイトがリポジトリから直接ホストされ、 Jekyll デフォルトとして。

JekyllWebhooks 、およびGAE上のGitHub APIスクリプトを適切なGAE設定外部スクリプトの呼び出し のような幅広い可能性を提供し、で動的ページを作成しますGitHub。

GAEの他に、Herokuで実行するオプションもあります。 (無料の)Herokuインスタンスに存在する JekyllBot を使用して サイレント 各投稿のJSONファイルを生成し、変更をGitHubにプッシュします。

0
Chetabahana