libgit2 / libgit2/pygit2

Cannot detach head

オープン
#1,286 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Python
スター
1.7k
フォーク
408
平均マージ
2日 57分
マージ済み PR(30日)
7

説明

code

import tempfile
import pygit2
import subprocess
import shutil
import sys

print(f"python: {sys.version}")
print(f"libgit2: {pygit2.LIBGIT2_VERSION}")
print(f"pygit2: {pygit2.__version__}")


repodir = tempfile.mkdtemp()
repo = pygit2.init_repository(repodir, bare=True)

sig = pygit2.Signature('Test User', 'testuser@nowhere.net')

data = 'blah blah master'
tree = repo.TreeBuilder()
tree.insert('file', repo.create_blob(data.encode()), pygit2.GIT_FILEMODE_BLOB)

master_commit_oid = repo.create_commit('HEAD', sig, sig, 'master commit', tree.write(), [])

repo.lookup_branch('master').set_target(master_commit_oid)

print(f"dullahan: {repo.head_is_detached}")

repo.head.set_target(master_commit_oid) # no effect?

print(f"dullahan: {repo.head_is_detached}")

subprocess.run(['cat', repodir + '/HEAD'])

data = 'blah blah feature'
tree = repo.TreeBuilder()
tree.insert('file', repo.create_blob(data.encode()), pygit2.GIT_FILEMODE_BLOB)

feature_commit_oid = repo.create_commit('HEAD', sig, sig, 'feature commit', tree.write(), [master_commit_oid])

feature_commit = repo.resolve_refish(feature_commit_oid.hex)[0] # why is this needed?!

repo.branches.local.create('feature', feature_commit)

subprocess.run(['git', '--no-pager', '--git-dir', repodir, 'log'])
shutil.rmtree(repodir)

output

python: 3.11.8 (main, Feb 29 2024, 12:19:47) [GCC]
libgit2: 1.8.0
pygit2: 1.14.1
dullahan: False
dullahan: False
ref: refs/heads/master
commit fd24ce9e6e104d9a3379bd533d1fc77c7ed4c171 (HEAD -> master, feature)
Author: Test User <testuser@nowhere.net>
Date:   Mon Apr 29 18:56:30 2024 +0200

    feature commit

commit f46e8132e419552a55edaceda91346b9ebdf2a45
Author: Test User <testuser@nowhere.net>
Date:   Mon Apr 29 18:56:30 2024 +0200

    master commit

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

提供された Python の再現コードを、報告された pygit2 および libgit2 のバージョンで実行し、その後 Repository.head、head_is_detached、lookup_branch、resolve_refish の動作を調査します。観測された HEAD とブランチの参照を、detached HEAD に期待されるセマンティクスと比較します。この再現をカバーするテストがあり、報告された動作が修正されるか明確に文書化されれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
git, python
領域
devtools
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。