Pygithub: [Beispiel] Vollständiges Beispiel für das Festschreiben mehrerer Dateien

Erstellt am 30. Juli 2020  ·  5Kommentare  ·  Quelle: PyGithub/PyGithub

Ich wechsle von gitlab zu github.
Als Bibliothek verwenden wir https://github.com/python-gitlab/python-gitlab
Um einen Commit für mehrere Dateien durchzuführen, verwenden wir genau dieses Beispiel: https://python-gitlab.readthedocs.io/en/stable/gl_objects/commits.html

Ich finde create_git_commit würde dasselbe in Github tun, aber es fehlen Dokumente.
Könnte jemand helfen, ein Beispiel für die Erstellung dieser Bäume usw. zu geben?

Vielen Dank.

stale

Hilfreichster Kommentar

Hier ist ein vollständiges Beispiel, das von meiner tatsächlichen Verwendung abstrahiert ist:
Ich bekomme viele Hinweise von diesem https://github.com/PyGithub/PyGithub/issues/863#issuecomment -517927446

Um sich auf den Master-Zweig festzulegen

import github
g = github.Github(base_url="https://git.mycompany.com/api/v3",login_or_token="mytoken")
repo = g.get_repo('myorg/myrepo')
# you can read file content into blob, here just use str for example
blob1 = repo.create_git_blob("file-content", "utf-8")
element1 = github.InputGitTreeElement(path="path-in-repo.ext", mode='100644', type='blob', sha=blob1.sha)
blob2 = repo.create_git_blob("file-content2", "utf-8")
element2 = github.InputGitTreeElement(path="folder/path-in-repo.ext", mode='100644', type='blob', sha=blob2.sha)
head_sha = repo.get_branch('master').commit.sha
base_tree = repo.get_git_tree(sha=head_sha)
tree = repo.create_git_tree([element1, element2], base_tree)
parent = repo.get_git_commit(sha=head_sha)
commit = repo.create_git_commit("commit_message", tree, [parent])
master_refs = self.github_repo.get_git_ref('heads/master')
master_ref.edit(sha=commit.sha)

Alle 5 Kommentare

Nun, endlich habe ich den vollständigen Prozess ... hoffentlich später teilen ...

Hier ist ein vollständiges Beispiel, das von meiner tatsächlichen Verwendung abstrahiert ist:
Ich bekomme viele Hinweise von diesem https://github.com/PyGithub/PyGithub/issues/863#issuecomment -517927446

Um sich auf den Master-Zweig festzulegen

import github
g = github.Github(base_url="https://git.mycompany.com/api/v3",login_or_token="mytoken")
repo = g.get_repo('myorg/myrepo')
# you can read file content into blob, here just use str for example
blob1 = repo.create_git_blob("file-content", "utf-8")
element1 = github.InputGitTreeElement(path="path-in-repo.ext", mode='100644', type='blob', sha=blob1.sha)
blob2 = repo.create_git_blob("file-content2", "utf-8")
element2 = github.InputGitTreeElement(path="folder/path-in-repo.ext", mode='100644', type='blob', sha=blob2.sha)
head_sha = repo.get_branch('master').commit.sha
base_tree = repo.get_git_tree(sha=head_sha)
tree = repo.create_git_tree([element1, element2], base_tree)
parent = repo.get_git_commit(sha=head_sha)
commit = repo.create_git_commit("commit_message", tree, [parent])
master_refs = self.github_repo.get_git_ref('heads/master')
master_ref.edit(sha=commit.sha)

Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität gab. Es wird geschlossen, wenn keine weiteren Aktivitäten stattfinden. Vielen Dank für Ihre Beiträge.

Ich wollte etwas Ähnliches machen (dh mehrere Dateien auf einmal übergeben), aber dieses Mal in einem Zweig. Unten ist funktionierender Code (lassen Sie mich wissen, ob er optimiert werden kann)

import github
g = github.Github("mytoken")
repo = g.get_repo('myorg/myrepo')

blob1 = repo.create_git_blob("file-content", "utf-8")
element1 = github.InputGitTreeElement(path="path-in-repo.ext", mode='100644', type='blob', sha=blob1.sha)
blob2 = repo.create_git_blob("file-content2", "utf-8")
element2 = github.InputGitTreeElement(path="folder/path-in-repo.ext", mode='100644', type='blob', sha=blob2.sha)

head_sha = repo.get_branch('master').commit.sha

# everything above is identical to <strong i="6">@xpdable</strong> 
# but here I create the branch
branch = repo.create_git_ref(ref=f"refs/heads/branch-name", sha=head_sha)
branch_sha = repo.get_branch("branch-name").commit.sha

# similar to <strong i="7">@xpdable</strong> but replacing head_sha with branch_sha
base_tree = repo.get_git_tree(sha=branch_sha)
tree = repo.create_git_tree([configuration_element, stats_element], base_tree)
parent = repo.get_git_commit(sha=branch_sha)
commit = repo.create_git_commit("commit_message", tree, [parent])
branch_refs = repo.get_git_ref("heads/branch-name")
branch_refs.edit(sha=commit.sha)

# optional : open a PR with the new branch
repo.create_pull(title="PR title", body="PR body", base="master", head="branch-name")

Irgendwelche Ratschläge zum Löschen von Dateien als Teil solcher Mehrfachdatei-Commits?

Einige Beiträge sprechen über das Erstellen neuer Bäume mit Verweisen auf Pfade mit Null-Shas oder das Ändern bestehender Bäume inkl. Ideen zum Schleifen und Finden aller Verweise auf die gelöschten Blobs?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen