1

pygit2パッケージを使用して、新しいリポジトリで最初のコミットを作成するにはどうすればよいですか?

「refs/heads/master」が見つからないというエラー メッセージが表示され続けます。

4

1 に答える 1

0

状況によっては、GitLab インスタンスを管理して大学のコースの課題を投稿および採点するために使用する現在のスパゲッティ コードから作成された Python モジュールに取り組んでいます。仕事はここで見つけることができます。私のアプリケーションでは、すべての学生に投稿する「テンプレート」課題としてリポジトリをダウンロードする必要があるため、コースのすべての学生に新しい git リポジトリで同じファイル ツリーを使用する必要があります (したがって、最初のコミットを何度も作成する必要があります)。また)。

ここでのトリックは、どこにも文書化されていません (この投稿の時点で pygit2 の文書が不足しているようです)、最初の引数を、たとえば、例のようにではなくに設定するcreate_commitこと"HEAD"です"refs/heads/master"。おそらく、これは git ウィザードにとって明らかなことですが、私は気付くのに少し時間がかかりました。

import pygit2 as git

template_proj_location = "/file/path/to/the/template"
# 'proj' is a python-gitlab object for the GitLab project this repo needs to get pushed to

repo = git.init_repository(template_proj_location, initial_head='master', origin = proj.ssh_url_to_repo)
(index := repo.index).add_all()
index.write()
tree = index.write_tree()
me = git.Signature("My Name", "myemail@email.domain.edu")
repo.create_commit("HEAD", me, me, "commit msg", tree, [])

# Now to push the repo to the new location
_, ref = repo.resolve_refish(refish=repo.head.name)
remote = repo.remotes["origin"]
remote.push([ref.name], callbacks = my_func_to_get_RemoteCallbacks_obj_for_ssh_auth)

以下を参考にしました。

于 2022-01-25T02:06:52.027 に答える