【问题标题】:sha/hash for new github branch新 github 分支的 sha/hash
【发布时间】:2019-01-11 03:03:45
【问题描述】:

刚开始深入使用 github,所以我还在学习。我想使用 python GitHub api(目前我正在使用 PyGithub)来自动创建新分支、提交、发出拉取请求。有几件事让我感到困惑......任何帮助将不胜感激。

  1. 当我使用 api 创建一个新分支时,它需要一个 sha/hash 值。有没有关于我应该如何计算这个哈希值的文档/指南?它可以是任何哈希吗?我注意到当我在 github.com 上创建一个新分支时,它不需要用户指定哈希值,我猜网站正在为你做这件事,那么生成是基于什么吗?

  2. 仍在学习,但我从官方 git 页面收集到的是,该分支只是哈希值的别名。在试图找出问题 #1 时,我尝试创建两个具有相同哈希值的分支,它可以工作,并且 afaik 所有提交都将转到正确的分支,因此它做正确的事情。但是由于两个分支具有相同的哈希值,那么提交应该去两个分支吗?

谢谢, 克

【问题讨论】:

    标签: git github hash pygithub


    【解决方案1】:

    如果您使用https://github.com/PyGithub/PyGithub,您可以使用Repository.create_git_ref 创建一个分支(如in this test):

    ref = self.repo.create_git_ref("refs/heads/BranchCreatedByPyGithub", "4303c5b90e2216d927155e9609436ccb8984c495")
    

    一个分支通常是从另一个分支创建的,这意味着您应该首先调用Repository.get_git_ref,使用您要从其开始的分支的名称:这将为您提供与create_git_ref 一起使用的SHA1。

    【讨论】:

    • 感谢您的回复。是的,这行得通,这导致了我的#2。当我使用现有分支创建新分支时,它们共享相同的哈希。那里不会发生某种碰撞吗?
    • @Trouble 没有冲突:第二个分支已准备好接受新的提交。参见git-scm.com/book/en/v1/Git-Branching-What-a-Branch-Is中的图3-4(以及下面的文字)
    【解决方案2】:

    你要在这里找到的关键项目——你的问题的来源——是 分支名称 在 Git 中根本没有什么意义。它们只是 可移动的指针,根据定义,它们指向分支中的 last 提交。多个名称可以指向任何单个提交。

    在 Git 中,重要的是 提交。提交是 Git 的raison d'être。提交只需通过创建即可获得哈希 ID,因为与 Git 的所有四种对象类型一样,哈希 ID 是提交内容的加密校验和。由于每个提交都是唯一的——它有一个时间戳来提供帮助,以防关于提交的所有else与之前的提交相同——每个提交都会获取一个新的、唯一的哈希 ID。

    但是,提交哈希 ID 似乎是随机的,人类不可能记住或使用。所以我们需要一些方法来命名我们想要记住的最新提交。这种方式通常带有一个分支名称。一旦我们有一个提交,我们可以指向它的任意数量的分支名称。

    每个提交都会记住它的父或父哈希 ID,因此我们只需要记住分支的最后一次提交,或 tip——所有较早的提交都可以从末尾开始找到并向后工作。因此,分支名称仅标识 tip 提交。

    当 Git 创建 new 提交时,Git 只是将新提交的哈希 ID 写入 当前分支。当前分支是哪个分支?答案同样简单:特殊名称 HEAD 包含当前分支的名称。

    确保任何有用的 Git 提交通过某个名称​​可访问 很重要,因为 Git 最终会垃圾收集任何无法访问的提交。也就是说,如果名称xyz 标识提交a123456...,则该提交受到垃圾收集器的保护。因此,提交的父母(或父母)和祖父母等等。 Git 给你一些时间(默认为 14 天)来连接事物,以便通过这种可达性理念保护包括提交在内的对象:你首先创建一个对象,例如 blob 或树或提交,然后更新任何名称( s) 需要能够找到该对象及其任何祖先。 14 天窗口是您在创建对象后完成名称更新的宽限期。

    【讨论】:

      猜你喜欢
      • 2020-12-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2021-09-05
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多