【问题标题】:Unable to get complete git history of file with python无法使用 python 获取文件的完整 git 历史记录
【发布时间】:2022-08-24 22:43:54
【问题描述】:

我正在尝试从每个修订版中获取所有内容-我正在使用 gitpython lib 的本地存储库中文件的历史记录,这是代码:

import git,json
from pprint import pprint
repo = git.Repo()
path = \"my_file_path\"

revlist = (
    (commit, (commit.tree / path).data_stream.read())
    for commit in repo.iter_commits(paths=path)
)

for commit, filecontents in revlist:
    filecontentsjs = json.loads(filecontents)
    pprint(commit)
    pprint(filecontentsjs[\"execution_status\"])
    pprint(filecontentsjs[\"execution_end_time\"])

问题:我正在比较我们的 bitbucket 历史记录和我从这个脚本获得的历史记录,并且脚本很短,这意味着 bitbucket 历史记录有更多的文件修订,但是当我在本地克隆 repo 时,我得到了脚本的一半修订

我在这里错过了什么吗?限制或类似的东西?

  • 你能提供一个Minimal Reproducible Example 吗?或者差异的一个例子?只是猜测:也许它与合并提交有关?
  • 好吧,我们使用 bitbucket,所以我转到我的 repo 和一个文件并单击历史记录,所以我看到大约 7-8 次提交,不同作者针对特定文件的不同日期,然后我将该 repo 克隆到我的本地计算机并运行 \" git log -- file_path --pretty=online\" 或 \"git rev-list HEAD --online file_name\" 我只得到同一个文件的 4 次提交
  • 对于命令行 Git,添加 --full-history。至于在这里为 GitPython 做什么,您必须查看文档以找到等效项。请注意,Git 中没有“文件历史记录”之类的东西:你得到的是过滤的提交历史,过滤规则决定了你得到的提交。添加--full-history 只会更改过滤规则。 Bitbucket 使用自己的过滤,不易复制,因此您可能还需要添加-m

标签: python git gitpython


【解决方案1】:

所以事实证明这是我的错我没有注意到文件名略有变化并且bitbucket做了它应该做的事情,因为它认为“如果代码相同则文件相同”这是不正确的

所以在 git log 中添加 --follow 标志我看到了完整的“坏”历史。 真正的“好”历史没有 --follow 因为我只关心同名文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多