gitpython检查使用PYTHON的文件是否有任何变化

时间:2017-02-22 04:02:45

标签: python git gitpython

我正在尝试gitpython,我是新手。我正在尝试检测是否有任何进行提交的更改。

目前,我的功能如下:

def commit(dir):
r = Repo(dir)
r.git.add(A=True)
r.git.commit(m='commit all')

但这只是提交目录的代码。我想做一些事情,如果有变化,然后显示一些消息,否则,显示另一条消息。

任何人都知道如何在python中做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以检查所有未分级的更改,如下所示:

for x in r.index.diff("HEAD"):
    # Just print
    print x

    # Or for each entry you can find out information about it, e.g.
    print x.new_file
    print x.b_path

基本上,您正在将暂存区域(即index)与活动分支进行比较。

答案 1 :(得分:0)

要获得已更改(但尚未上演)的最终列表:

# Gives a list of the differing objects
diff_list = repo.head.commit.diff()

for diff in diff_list:
    print(diff.change_type) # Gives the change type. eg. 'A': added, 'M': modified etc.

    # Returns true if it is a new file
    print(diff.new_file) 

    # Print the old file path
    print(diff.a_path)

    # Print the new file path. If the filename (or path) was changed it will differ
    print(diff.b_path) 

# Too many options to show. This gives a comprehensive description of what is available
help(diff_list[0]) 

我发现 diff 对象非常有用,应该可以提供您需要的任何信息。

对于暂存项目,使用 repo.index

从我的测试中,我发现之前的答案给出了错误的 diff 输出(即添加的文件会显示为已删除)。

另一个选项是 repo.git.diff(...),我发现它不太有用,因为它为输出提供了长文本字符串,而不是可以轻松解析的对象。