首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git Python入门

Git Python入门
EN

Stack Overflow用户
提问于 2012-01-04 17:00:34
回答 2查看 5.9K关注 0票数 3

我的目标是从Python访问现有的Git代码库。我想获得回购历史和按需差异。

为了做到这一点,我从dulwich开始。所以我试着:

代码语言:javascript
复制
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中的新更改,所以我更愿意使用远程,这样我就可以检测到尚未拉到本地的更改。我不确定这应该如何工作,所以任何帮助都会得到重视。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-05 01:04:54

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

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

代码语言:javascript
复制
from dulwich.repo import Repo
x = Repo("/path/to/git/repo")

或者创建一个新的:

代码语言:javascript
复制
x = Repo.init("/path/to/new/repo")

获取特定提交的diff (与其第一个父级的diff )

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

代码语言:javascript
复制
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"]]
票数 3
EN

Stack Overflow用户

发布于 2012-01-04 17:11:53

我认为init方法是用来创建一个新的存储库的,要打开一个现有的存储库,你只需要这样传递它的路径:

代码语言:javascript
复制
from dulwich.repo import Repo
repo = Repo(<path>)

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8724264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档