我正在尝试gitpython,我是新手。我正在尝试检测是否有任何进行提交的更改。
目前,我的功能如下:
def commit(dir):
r = Repo(dir)
r.git.add(A=True)
r.git.commit(m='commit all')
但这只是提交目录的代码。我想做一些事情,如果有变化,然后显示一些消息,否则,显示另一条消息。
任何人都知道如何在python中做到这一点?
答案 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(...)
,我发现它不太有用,因为它为输出提供了长文本字符串,而不是可以轻松解析的对象。