3

私の目標は、Pythonから既存のGitリポジトリにアクセスすることです。レポ履歴とオンデマンド差分を取得したい。

それをするために、私はdulwichから始めました。だから私は試しました:

from dulwich.repo import Repo
Repo.init('/home/umpirsky/Projects/my-exising-git-repo')

そして得たOSError: [Errno 17] File exists: '/home/umpirsky/Projects/my-exising-git-repo/.git

ドキュメントには、と書かれてYou can open an existing repository or you can create a new one.います。

それを行う方法はありますか?dulwichで履歴と差分を取得できますか?Gitアクセス用に他のlibを推奨できますか?私はUbuntuアプリを開発しているので、簡単にデプロイできるようにubuntuパッケージを用意することをお勧めします。

また、定期的にチェックしてリポジトリの新しい変更を検出するので、リモートで作業して、まだローカルにプルされていない変更を検出できるようにします。これがどのように機能するかわからないので、どんな助けでも適用されます。

前もって感謝します。

4

2 に答える 2

6

このメソッドは、新しいリポジトリを作成するために使用されていると思いますinit。既存のリポジトリを開くには、次のようにパスを渡すだけです。

from dulwich.repo import Repo
repo = Repo(<path>)

代替ライブラリの概要については、この回答をご覧ください。subprocess基本的に、それはあなたがすでに知っているインターフェースを使用するための最良の方法であるため、モジュールを使用する方が簡単であることを示唆しています。

于 2012-01-04T09:11:53.103 に答える
3

Dulwichのドキュメントのほとんどは、Gitファイルの形式/プロトコルに関するかなりの知識があることを前提としています。

次のコマンドで既存のリポジトリを開くことができるはずですRepo

from dulwich.repo import Repo
x = Repo("/path/to/git/repo")

または新しいものを作成します。

x = Repo.init("/path/to/new/repo")

特定のコミットの差分(最初の親との差分)を取得するには

from dulwich.patch import write_tree_diff
commit = x[commit_id]
parent_commit = x[commit.parents[0]]
write_tree_diff(sys.stdout, x.object_store, parent_commit.tree, commit.tree)

Gitプロトコルでは、パックのフェッチ/送信のみが許可されており、データベース内の特定のオブジェクトへの直接アクセスは許可されていません。これは、リモートリポジトリを検査するには、最初にリモートリポジトリから関連するコミットをフェッチする必要があり、次にそれらを表示できることを意味します。

from dulwich.client import get_transport_and_path
client, path = get_transport_and_path(remote_url)
remote_refs = client.fetch(path, x)
print x[remote_refs["refs/heads/master"]]
于 2012-01-04T17:04:53.883 に答える