GitPython 通过 sha 获取树和 blob 对象

2023-11-26

我正在将 GitPython 与裸存储库一起使用,并尝试通过其 SHA 获取特定的 git 对象。如果我直接使用git,我会这样做

git ls-tree sha_of_tree
git show sha_of_blob

由于我使用 GitPython 并且想要获取特定的树,因此我执行以下操作:

repo = Repo("path_to_my_repo")
repo.tree("b466a6098a0287ac568ef0ad783ae2c35d86362b")

并把这个拿回来

<git.Tree "b466a6098a0287ac568ef0ad783ae2c35d86362b">

现在我有一个树对象,但我无法访问它的属性,如路径、名称、blob 等。

repo.tree("b466a6098a0287ac568ef0ad783ae2c35d86362b").path
Traceback (most recent call last):

File "<stdin>", line 1, in <module>
File "c:\Python27\lib\site-packages\gitdb\util.py", line 238, in __getattr__
self._set_cache_(attr)
File "c:\Python27\lib\site-packages\git\objects\tree.py", line 147, in _set_cache_
super(Tree, self)._set_cache_(attr)
File "c:\Python27\lib\site-packages\git\objects\base.py", line 157, in _set_cache_
raise AttributeError( "path and mode attributes must have been set during %s object creation" % type(self).__name__ )
AttributeError: path and mode attributes must have been set during Tree object creation

但如果我输入以下内容,它就会起作用

repo.tree().trees[0].path

我的问题的另一部分是如何使用 GitPython 获取 blob 对象。我注意到唯一的对象树具有属性 blob,因此为了通过 SHA 获取 blob,我必须 (a) 首先知道它属于哪棵树,(b) 找到这个 blob,然后 (c) 调用data_stream方法。 我可以这样做

repo.git.execute("git show blob_sha")

但我首先想知道这是唯一的方法。


尝试这个:

   def read_file_from_branch(self, repo, branch, path, charset='ascii'):
            '''
            return the contents of a file in a branch, without checking out the
            branch
            '''
            if branch in repo.heads:
                blob = (repo.heads[branch].commit.tree / path)
                if blob:
                    data = blob.data_stream.read()
                    if charset:
                        return data.decode(charset)
                    return data
            return None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitPython 通过 sha 获取树和 blob 对象 的相关文章

随机推荐

  • 在 Swift WKWebView 中捕获 window.postMessage

    我正在开发一个 swift ios 应用程序 它使用WKWebView加载电子商务网站 当用户在这里购买产品时 结帐页面允许用户用加密货币付款 当用户点击 在钱包中打开 时 网站会弹出一个 window postMessage paymen
  • 转置数据框,将第一列保持为标题

    我有一个大数据框 但小例子如下 mydf lt data frame A c letters 1 10 M1 c 11 20 M2 c 31 40 M3 c 41 50 我想转置数据框并将第 1 列 A 保留为列标题 字母 1 10 作为变
  • 减小 Cordova apk 的大小

    我正在开发一个混合应用程序 现在我在phonegap和cordova之间陷入了困境 Cordova 现在在我的电脑中 当我执行 cordova build android 我得到的 apk 大小为 3 7 mb 不过 如果我使用 build
  • iPhone/iOS:如何判断手机在运行时使用的本地化版本?

    我在本地化应用程序时遇到了困难 它需要本地化为波斯语 伊朗波斯语 不仅如此 当选择 fa IR 作为本地化时 它还需要使用阳历 该操作系统有一个波斯日历 我使用它没有问题 但我需要知道fa IR本地化已被选择 雪上加霜的是 我无法在美国测试
  • 远程 gdb 调试不会在断点处停止

    我在调试修改后的 Linux 3 11 0 内核时遇到问题 为了调试代码 我使用 GDB 7 6 QEMU 1 6 5 Linux内核3 11 0 我的系统有 Intel R Core TM i7 2760QM CPU 2 40GHz 运行
  • “aapt”错误。预编译器构建中止

    我使用 Eclipse 4 2 2 和 Android SDK 22 0 1 构建一个使用 Facebook 和 Google Play 服务库的 Android 应用程序 然而我遇到了一个问题 每次我包含一个或两个库时 aapt 详细模式
  • 文件上传在 Primefaces 中不起作用

    我有一些问题
  • Spring-boot+JPA EntityManager注入失败

    在我的 J2EE 应用程序中 我尝试使用 spring boot 和 JPA 技术 并将 EntityManager 注入到 DAO 层 但是 我有一些问题 我的用户 CRUD 存储库 Repository public class Use
  • 推荐放置小型 python 便利模块的位置在哪里

    我收集了一小部分方便的临时脚本 我希望在我的所有 python 项目和 ipython 交互式会话中都可以使用它们 我想添加并清理这个集合 而不必担心制作 setup py 文件并正式安装它们 默认情况下 从 sys path 上的目录列表
  • php echo 中的 \n 或 \n 不打印[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中用单引号打印换行符 php中单引号和双引号字符串的区别 unit1 paragrahp1 unit2 paragrahp2 echo p unit1 p n echo p unit2 p
  • Backbone.js 获取更复杂的数据并用作集合

    假设我有这样的 json 设置 page 1 items name item1 id 1 name item1 id 2 name item1 id 3 还有这样的建模 var Item Backbone Model extend defa
  • Codeigniter - 无法修改标头信息 - 标头已发送

    A PHP Error was encountered Severity Warning Message Cannot modify header information headers already sent by output sta
  • 正则表达式:验证具有多个分隔符的欧洲日期格式

    我想验证欧洲日期格式 例如 10 02 2012 或 10 02 2012 因此我创建了以下正则表达式 d 0 9 2 d 0 9 2 d 0 9 4 不幸的是 即使日期的格式正确 我总是收到无效的消息 当我将 替换为 时仅验证用点分隔的日
  • 在大写字母处插入或分割字符串 Objective-c

    在 Objective C 中将 ThisStringIsJoined 之类的字符串转换为 This String Is Joined 最有效的方法是什么 我从不受我控制的网络服务收到这样的字符串 我想将数据呈现给用户 所以我想通过在每个大
  • Oauth 导入错误

    我在用Python on windows使用相同的代码 它工作得很好 现在它突然发生了更新程序的变化 我发现了错误导入错误 无法将名称导入到 native string你能帮我看看为什么会出现这个错误吗 Traceback most rec
  • Android NDK 调试

    对于我来说 Android NDK 文档似乎不太清楚如何运行命令序列来将调试信息放入和取出提供的 ndk gdb 可执行文件 如果有关于在什么行上中断以及在什么文件中中断的格式 是否有某个地方有规范 如果是这样 那么您如何向该调试器提供该信
  • 我可以使用 Html Agility Pack 来解析 HTML 片段吗?

    Html Agility Pack 可以用来解析 html 字符串片段吗 Such As var fragment b Some code b 然后全部提取 b 标签 到目前为止我看到的所有示例都是像 html 文档一样加载的 如果是 ht
  • 如何访问qt上的父小部件?

    我有一个继承的 QTreeWidget 称为 PackList 类 其父类是 KXmlGuiWindow 我怎样才能访问父级的插槽 我已经尝试过 QTreeWidget 类中的 getParent gt mySlot 但我有 error n
  • 访问私有变量的单元测试

    我有一个单元测试课Tester 我希望它访问 a 的私有字段Working class class Working private int m variable class Tester void testVariable Working
  • GitPython 通过 sha 获取树和 blob 对象

    我正在将 GitPython 与裸存储库一起使用 并尝试通过其 SHA 获取特定的 git 对象 如果我直接使用git 我会这样做 git ls tree sha of tree git show sha of blob 由于我使用 Git