【问题标题】:Git show path does not exist in commitGit 显示路径在提交中不存在
【发布时间】:2023-02-22 01:59:27
【问题描述】:

我正在尝试使用 gitpython 获取特定提交上特定文件的内容,如下所示:

repo.git.show('{}:{}'.format(12cf56252dcb1535e0fbeb9c3e3586551af671ea, '%s/%s' % ('versions/library-2.6' ,'Dockerfile')) 但我收到此错误:

“Cmd('git')由于:退出代码(128)cmdline:git show 12cf56252dcb1535e0fbeb9c3e3586551af671ea:versions/library-2.6/Dockerfile stderr:'fatal:路径'versions/library-2.6/Dockerfile'在'12cf56252dcb3afbe15635e15635e中不存在''"

该路径实际存在于该提交中: link to the commit

然而,页面上出现警告说:“此提交不属于此存储库上的任何分支,并且可能属于存储库外部的分支。”

如何使用 gitpython 获取此提交中该文件的内容?

【问题讨论】:

  • 你在本地有提交 12cf56252dcb1535e0fbeb9c3e3586551af671ea 吗?检查git show 12cf56252dcb1535e0fbeb9c3e3586551af671ea
  • 不,我已经克隆了存储库,如果它没有随回购一起提供,我该如何获得该提交? @phd
  • 警告对我来说似乎很清楚。该提交不存在于存储库的任何分支中。这并不是说文件versions/library-2.6/Dockerfile 不存在。这只是说从该提交中检索给定路径是不可能的,因为该提交不存在。你从哪里得到的哈希值?
  • 由于提交不在任何分支上,垃圾收集器迟早会删除它。您最好找出分支上的提交。在寻找什么? library-2.6?分支机构rootfs/library-2.6 呢?

标签: python git github commit gitpython


【解决方案1】:

要获取孤立的提交:

git fetch origin <full-40-char-sha>
# for example:
git fetch origin 12cf56252dcb1535e0fbeb9c3e3586551af671ea

这假设提交仍然存在于您从中获取的 repo 中(并且您的远程名为 origin)。对于许多基于服务的 SCM 工具,包括 GitHub 和 Azure DevOps,默认情况下,推送的提交永远不会被垃圾收集,并且将永远通过它们的完整哈希保持可访问性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 2015-09-19
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2021-04-29
    • 2018-02-13
    • 2017-04-20
    相关资源
    最近更新 更多