3

我想知道我如何才能达到git status与德威相当的水平?

我试过这个:

在添加/更改/重命名一些文件并将它们暂存以进行提交之后,这就是我尝试做的事情:

from dulwich.repo  import Repo
from dulwich.index import changes_from_tree
r = Repo('my-git-repo')
index = r.open_index()
changes = index.changes_from_tree(r.object_store, r['HEAD'].tree)

输出以下内容:

>>> list(changes)
(('Makefile', None), (33188, None), ('9b20...', None))
(('test/README.txt', 'test/README.txt'), (33188, 33188), ('484b...', '4f89...'))
((None, 'Makefile.mk'), (None, 33188), (None, '9b20...'))
((None, 'TEST.txt'), (None, 33188), (None, '2a02...'))

但是这个输出需要我进一步处理它来检测:

  1. 我修改了README.txt.
  2. 我重命名MakefileMakefile.mk.
  3. 我添加TEST.txt到存储库。

中的函数dulwich.diff_tree为树更改提供了一个更好的界面......在实际提交之前这是不可能的吗?

4

2 回答 2

2

你应该可以dulwich.diff_tree.tree_changes用来检测两棵树之间的变化。

对此的要求之一是您将相关的树对象添加到对象存储中 - 您可以使用dulwich.index.commit_index它。

于 2012-06-10T11:27:37.100 回答
1

为了完整起见,一个工作示例:

from dulwich.repo import Repo
from dulwich.diff_tree import tree_changes

repo = Repo("./") 

index = repo.open_index()

try:
    head_tree = repo.head().tree
except KeyError: # in case of empty tree
    head_tree = dulwich.objects.Tree()

changes = list(tree_changes(repo, head_tree, index.commit(repo.object_store)))


for change in changes:
    print "%s: %s"%(change.type,change.new.path)
于 2013-09-19T07:46:55.170 回答