※当サイトの記事には、広告・プロモーションが含まれます。

PythonのライブラリPyGitHubとGitPythonでトークン認証後のGit操作したかったが...

www.itmedia.co.jp

 中国科学技術大学浙江大学に所属する研究者らが発表した論文「Terabit-scale high-fidelity diamond data storage」は、レーザーを使ってダイヤモンドに情報をエンコードし、安全かつ長期保存を実現するデータストレージ技術を提案した研究報告である。

“ダイヤモンド”をデータストレージに 数百万年もデータ保存、読み出し精度はほぼ100% 中国チームが発表:Innovative Tech - ITmedia NEWS

 この技術の中核となるのは、ダイヤモンドの中に形成される「GR1中心」と呼ばれる特殊な構造である。GR1中心は驚くべき安定性を持ち、室温で1014年、226.85度(=500K)の高温でも1000年という超長期の保存が可能である。また、光による読み出しを何度繰り返しても劣化しにくいという特長を持つ。

“ダイヤモンド”をデータストレージに 数百万年もデータ保存、読み出し精度はほぼ100% 中国チームが発表:Innovative Tech - ITmedia NEWS

⇧ amazing...

PyGitHubには、git push相当の機能が無い

前回、

ts0818.hatenablog.com

⇧「PyGitHub」なるライブラリを試してみました。

で、「git push」相当の機能が見当たらず、クローズしてはいたのですが、「issue」に質問を追加してみたところ、

github.com

⇧『That is right, PyGithub is to be used to interact with the Github Web API, not a local Git repository. Git and Github are separate things. Github is a Web frontend for a Git server hosted by Github. PyGithub does not interact with Git infrastructure.

という回答をいただけました。

その他のgit操作系のライブラリってどんな機能が利用可能なのか

そもそも、「Python」において、「Git」操作系のライブラリで機能のサポート状況とかどんな感じなのか分からないので、ChatGPTに質問してみたところ、

凡例

  • ✅ (緑): 操作可能
  • ❌ (赤): 操作不可
  • 🔶 (オレンジ): 一部操作可能(制限あり)
ライブラリ名 GitHub Appトークン取得可能 bareリポジトリ操作可能 git pull 相当 git add 相当 git commit 相当 git push 相当 コメント
PyGithub GitHub APIとの連携が得意。ローカルGit操作は不可。
GitPython 🔶 Gitのローカル操作が可能。GitHub Appの認証には別途設定が必要。
gitsome Git操作が得意で、bareリポジトリに対応。GitHub App認証には対応していない。
dulwich ローカルGit操作に強い。GitHub Appの認証には対応していない。
pygit2 GitHub Appトークン取得とローカルGit操作両方に対応。
git-remote-helper リモートGit操作を補完。GitHub Appトークン取得には対応していない。
github3.py GitHub APIの操作には対応しているが、ローカル操作は不可。
GitDB 🔶 GitPythonのバックエンドで動作。bareリポジトリ操作可能だが、GitHub App認証には対応していない。

⇧ 上記のような回答が返ってきた。

つまり、

  1. GitHub Appのトークン取得の処理
  2. Git操作系の処理

の両方をカバーしているライブラリは「pygit2」だけらしい...

GitPythonとは?

ChatGPTに質問してみたところ、最も情報量が多いという回答だったのが、「GitPython」というライブラリ。

github.com

GitPython is a python library used to interact with Git repositories.

https://github.com/gitpython-developers/GitPython

⇧ 開発者のモチベーションが低下しているという不安はあるのだけど、職場の方と話をしていて、

  • そもそも、「git」自体の主な仕様は固まっている。
    今さら、git pull、commit、pushなどの基本操作は変わらないはず。
  • GitPythonとしてできることはやり切った?
  • 標準ライブラリsubprocessで実装だとOS(Operation System)依存してしまう。
    https://github.com/python/cpython/blob/main/Lib/subprocess.py

という感じがあするので、「GitPython」を利用してみることにします。

PythonのライブラリPyGitHubとGitPythonでトークン認証後のGit操作したかったが...

悲報...

github.com

⇧ 何やら、「bare repository」への対応が微妙っぽい...

結局のところ、「working tree(作業ツリー)」を用意する必要があるらしく、「bare repository」の意味が無くなるという残念な感じになっているっぽい...

ChatGPTの回答では、「GitPython」の情報が多いって話だったんだが、「bare repository」による一連のGit操作が実現できるという情報が見当たらず...

泥沼になる予感しかない...

毎度モヤモヤ感が半端ない…

今回はこのへんで。