【发布时间】:2019-12-18 04:39:51
【问题描述】:
我正在使用 GitPython 查找一段时间内(例如现在和 1 周前)更改的文件:
repo = Repo(self.repo_directory)
for item in repo.head.commit.diff('develop@{1 weeks ago}'):
print ("smth")
但即使将周数更改为不同的数字也没有任何反应,这意味着在该时间段内没有检测到差异。如果我将'develop@{1 weeks ago}' 更改为'HEAD@{1 weeks ago}',那么更改的数量会很大,这在一周内是不正确的。任何帮助表示赞赏。
【问题讨论】:
-
请记住,
ref@{reflog-selector}只是一种指定特定提交哈希的方法。 reflog 选择器选择 Git 如何查看给定 ref 的 reflog(@之前的那个),并选择其中一个值。使用git reflog <ref>显示该引用的引用日志:您的引用日志表达式选择的哈希 ID 将是这些哈希 ID 之一。 -
真的,看看 你的 reflogs。您的 reflog 是 yours 的——它们反映了 you 在 your 存储库中所做的活动。它们不反映任何其他存储库中的活动!如果有人在十年前更改了 他们的 master 中的某个文件,而你昨天将 Git 连接到他们的 Git 并在昨天收到了他们的新提交,your reflogs 会说“这发生在昨天"。
-
感谢 Torek,那么您建议如何在 repo 中查找已更改文件的列表(添加、删除、...)?如果您知道,使用 GitPython 或其他一些 Python 包?
-
也许足够接近,是的。但是您可能希望使用原始哈希 ID:它们标识一个确切的提交,并且不依赖于图的相对遍历。 (使用
git log --pretty=format:%H或git rev-list来获取正确的哈希ID。)也不是那个相对是错误,只是如果你进行新的提交,突然间~10现在是@987654331 @。或者,如果您的提交 DAG 非常复杂,您可能需要HEAD~3^2~2^2~4^2或类似的疯狂的东西才能使用相对运动到达那里。如果您正在编写代码,这很荒谬:编译器可以记住哈希 ID! -
“十次首次提交从我自己的分支名称
develop现在指向的位置后退”的语法是develop~10,而不是develop@{HEAD~10}。见the gitrevisions documentation。请记住,对于任何涉及 any 历史提交的内容,any 名称只是我们让 Git 找到提交的哈希 ID 的一种方法。
标签: python git git-diff gitpython