Git Python入门

2024-06-26 17:45:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是从Python访问现有的Git repo。我想得到回购历史和按需差价。

为了做到这一点,我从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

doc表示You can open an existing repository or you can create a new one.

知道怎么做吗?我能用德尔威奇查一下历史和差异吗?你能为Git访问推荐其他库吗?我正在开发Ubuntu应用程序,所以有Ubuntu软件包会更容易部署。

我还将定期检查以检测repo中的新更改,因此我更愿意使用remote,以便能够检测尚未拉到本地的更改。我不知道该怎么办,所以会通知你任何帮助。

提前谢谢。


Tags: git目标homeubuntumyrepo历史can
2条回答

Dulwich的大部分文档都假定对Git文件格式/协议有一定的了解。

您应该能够使用Repo打开现有存储库:

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

或者创建一个新的:

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

获取特定提交的diff(带有第一个父级的diff)

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协议只允许获取/发送包,不允许直接访问数据库中的特定对象。这意味着,要检查远程存储库,首先必须从远程repo获取相关提交,然后才能查看它们:

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"]]

我认为init方法用于创建一个新的存储库,要打开一个现有的存储库,只需按以下方式传递路径即可:

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

有关其他库的摘要,请查看此answer。基本上,它建议更容易使用subprocess模块,因为这是使用您已经知道的接口的最佳方式。

相关问题 更多 >