トップをクリックして「検査アルゴリズム、」「トップやスター'を選択
優れた記事を読んだのは初めて!
著者:匿名のpython
リンクします。https://note.qidong.name/2018/01/gitpython
時には複雑な操作にGitを行う必要があり、多くの中間の論理があります。複雑な論理演算を行い、プロセス制御がシェルとの災害です。だから、Pythonで快適な選択を達成することです。この場合は、Gitのライブラリーは、Pythonで動作する必要があります。
GitPythonプロフィール
GitPythonは、基礎となるコマンド(配管)と高レベルのコマンド(磁器)を含む、PythonライブラリのGitのリポジトリと対話しています。シェルと頻繁に相互作用変形コードを避けるために、読み取りと書き込み操作のGitのほとんどを実装することができます。それは純粋なPython実装ではなく、一部の直接の実装に依存git
コマンドとGitDBに、部分的に依存。
GitDBはPythonライブラリです。これは、ある.git/objects
データベースモデルの確立、あなたは読み取りと書き込みを指示することができます。書込みストリーム(ストリーム)の結果として、とても効率的な動作、低メモリ使用量という。
GitPythonインストール
pip install GitPython
その依存性GitDBは自動的にインストールされていますが、実行可能なgit
コマンドは、追加のインストールが必要です。
基本的な使い方
初期化
import git
repo = git.Repo.init(path='.')
このように、現在のディレクトリにGitリポジトリを作成します。もちろん、パスは、カスタマイズすることができます。
git.Repo
実現__enter__
と__exit__
、従ってことができるwith
組み合わせて用います。
with git.Repo.init(path='.') as repo:
# do sth with repo
必要性のこの形の使用は高くないので、しかし、ちょうど閉じた後、いくつかのクリーンアップ操作を実現するためには、まだ、読み取ることができます。付録を参照してください。
クローン
2つの方法でクローン。別の場所に現在のライブラリから一つのクローン:
new_repo = repo.clone(path='../new')
URLの場所に地元から第二クローン:
new_repo = git.Repo.clone_from(url='[email protected]:USER/REPO.git', to_path='../new')
コミット
with open('test.file', 'w') as fobj:
fobj.write('1st line\n')
repo.index.add(items=['test.file'])
repo.index.commit('write a line into test.file')
with open('test.file', 'aw') as fobj:
fobj.write('2nd line\n')
repo.index.add(items=['test.file'])
repo.index.commit('write another line into test.file')
状態
GitPythonは、元を達成しなかったgit status
が、情報のセクションを提供します。
>>> repo.is_dirty()
False
>>> with open('test.file', 'aw') as fobj:
>>> fobj.write('dirty line\n')
>>> repo.is_dirty()
True
>>> repo.untracked_files
[]
>>> with open('untracked.file', 'w') as fobj:
>>> fobj.write('')
>>> repo.untracked_files
['untracked.file']
チェックアウト(すべての修正をクリーンアップ)
>>> repo.is_dirty()
True
>>> repo.index.checkout(force=True)
<generator object <genexpr> at 0x7f2bf35e6b40>
>>> repo.is_dirty()
False
ブランチ
現在のブランチを取得します。
head = repo.head
新支店:
new_head = repo.create_head('new_head', 'HEAD^')
枝の切り替え:
new_head.checkout()
head.checkout()
削除された支店:
git.Head.delete(repo, new_head)
# or
git.Head.delete(repo, 'new_head')
マージ
する方法を示しother
(支店)、別のブランチをマージmaster
()。
master = repo.heads.master
other = repo.create_head('other', 'HEAD^')
other.checkout()
repo.index.merge_tree(master)
repo.index.commit('Merge from master to other')
リモート、プル、プッシュをフェッチ
リモートの作成:
remote = repo.create_remote(name='gitlab', url='[email protected]:USER/REPO.git')
リモートの相互作用:
remote = repo.remote()
remote.fetch()
remote.pull()
remote.push()
削除リモート:
repo.delete_remote(remote)
# or
repo.delete_remote('gitlab')
他の
他のタグ、サブモジュール他の関連する操作があり、非常に一般的ではありません、ここに提示されません。
GitPythonの利点は、読み出し動作を行うときに、簡単に、どこにも近く十分に書き込み操作を行う場合の欠点は、非常に便利な感じている、内部の情報を得ることができるということです。もちろん、それはまたの直接実行サポートgit
業務を。
git = repo.git
git.status()
git.checkout('HEAD', b="my_new_branch")
git.branch('another-new-one')
git.branch('-D', 'another-new-one')
この感覚......昔に戻って、まだ不思議な感じ。
Gitの他の操作方法
サブプロセス
これは、いわゆる「古い」です。別のプロセスで、シェルコマンドの実行、および標準入出力を介して解析する結果を返します。
import subprocess
subprocess.call(['git', 'status'])
ダルウィッチ
ダルウィッチは無料、Gitのインタラクティブライブラリの純粋なPython実装であるし、後でそれを研究しています。
公式サイト:httpsを://www.dulwich.io/
pygit2
pygit2は、Pythonのライブラリlibgit2の実装に基づいています。下層はCであるが、上部のみPythonのインターフェイス、効率が最高でなければならない動作が、孤立はあきらめました。欠点は、環境の必要性を事前にインストールすることlibgit2です。これとは対照的に、GitPythonのみ環境プリセットGitの、はるかに簡単。
公式サイト:のhttp://www.pygit2.org/
参照
「GitPythonマニュアル」
「GitDBのマニュアルにようこそ!」
「Gitの - 基本となるコマンド(配管)と高レベルのコマンド(磁器)」
「GitPython | ホム "
付録
でgit.Repo
次のように実装され、関連するインタフェースの文脈。
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
self.close()
def __del__(self):
try:
self.close()
except:
pass
def close(self):
if self.git:
self.git.clear_cache()
gc.collect()
gitdb.util.mman.collect()
gc.collect()
目に見えるだけで、いくつかのクリーンアップ操作を、シャットダウンする必要性が高くありません。あなたが閉じている場合でも、あなたはまだこれにできるgit.Repo
インスタンス読み書きします。
以上,便是今天的分享,希望大家喜欢,觉得内容不错的,欢迎点击「在看」支持,谢谢各位。