开始使用Git Python
我的目标是通过Python访问现有的Git仓库。我想获取仓库的历史记录和按需的差异。
为此,我开始使用dulwich。于是我尝试了:
from dulwich.repo import Repo
Repo.init('/home/umpirsky/Projects/my-exising-git-repo')
结果出现了一个错误:OSError: [Errno 17] 文件已存在: '/home/umpirsky/Projects/my-exising-git-repo/.git
文档中提到:你可以打开一个现有的仓库,或者创建一个新的仓库。
有没有人知道该怎么做?我能用dulwich获取历史记录和差异吗?你能推荐其他用于访问Git的库吗?我正在开发一个Ubuntu应用,所以如果有Ubuntu的包可以更方便地部署,那就太好了。
我还会定期检查仓库中的新变化,所以我更希望能与远程仓库合作,这样我就能发现那些还没有拉取到本地的变化。我不太确定这应该怎么操作,所以任何帮助都非常感谢。
提前谢谢大家。
2 个回答
6
我觉得 init
方法是用来创建一个新的仓库的。如果你想打开一个已经存在的仓库,只需要这样传入它的路径:
from dulwich.repo import Repo
repo = Repo(<path>)
关于其他库的总结,可以看看这个 回答。基本上,它建议使用 subprocess
模块会更简单,因为这样可以用你已经熟悉的方式来操作。
4
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"]]