Π― ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠΆΡ Ρ gitlab Π½Π° github.
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ https://github.com/python-gitlab/python-gitlab Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠΌΠΌΠΈΡ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ², ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ: https://python-gitlab.readthedocs.io/en/stable/gl_objects/commits.html .
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ create_git_commit ΡΠ΄Π΅Π»Π°Π» Π±Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π² github, Π½ΠΎ Π±Π΅Π· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠΈΡ
Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΠΈ Ρ. Π΄.?
ΠΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ.
Π½Ρ Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ» Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ... Π½Π°Π΄Π΅ΡΡΡ, ΠΏΠΎΠ΄Π΅Π»ΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅...
ΠΠΎΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΡ ΠΌΠΎΠ΅Π³ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
Π― ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΎΡ ΡΡΠΎΠ³ΠΎ https://github.com/PyGithub/PyGithub/issues/863#issuecomment -517927446
Π§ΡΠΎΠ±Ρ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π²Π΅ΡΠΊΡ
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)
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π² Π½Π΅ΠΉ Π½Π΅ Π±ΡΠ»ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΠ½ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ, Π΅ΡΠ»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
Π― Ρ ΠΎΡΠ΅Π» ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ (Ρ.Π΅. Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²), Π½ΠΎ Π½Π° ΡΡΠΎΡ ΡΠ°Π· Π² Π²Π΅ΡΠΊΠ΅. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠΎΠ΄ (Π΄Π°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π΅Π³ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ)
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")
ΠΡΠ±ΡΠ΅ ΡΠΎΠ²Π΅ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ»Ρ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΡΠ°ΠΊΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ²?
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΡΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π½Π° ΠΏΡΡΠΈ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ ΡΠ° ΠΈΠ»ΠΈ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π², Π² Ρ.Ρ. ΠΈΠ΄Π΅ΠΈ ΠΎ Π·Π°ΡΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π²ΡΠ΅Ρ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΡΠ΅ ΠΊΠ°ΠΏΠ»ΠΈ?
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΡ ΠΌΠΎΠ΅Π³ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
Π― ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΎΡ ΡΡΠΎΠ³ΠΎ https://github.com/PyGithub/PyGithub/issues/863#issuecomment -517927446
Π§ΡΠΎΠ±Ρ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π²Π΅ΡΠΊΡ