Pythonの使い方Gitリポジトリを操作?GitPython入門プレゼンテーション

トップをクリックして検査アルゴリズム、」「トップやスター'を選択

優れた記事を読んだのは初めて!

著者:匿名の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インスタンス読み書きします。

以上,便是今天的分享,希望大家喜欢,觉得内容不错的,欢迎点击「在看」支持,谢谢各位。





公開された99元の記事 ウォン称賛63 ビュー120 000 +

おすすめ

転載: blog.csdn.net/zandaoguang/article/details/104438119