Py学习  »  Git

新github分支的sha/hash

Trouble • 5 年前 • 1501 次点击  

刚开始使用github,所以我还在学习。我想使用python github api(目前我正在使用pygithub)来创建新的分支,提交,自动发出pull请求。一些让我困惑的事情…任何帮助都将不胜感激。

  1. 当我使用api创建一个新分支时,它需要一个sha/hash值。有没有关于如何计算这个散列值的文档/指南?它能只是一些杂碎吗?我注意到,当我在github.com上创建一个新的分支时,它不需要用户指定散列值,我猜网站是为您做的,所以生成是基于某种东西吗?

  2. 我还在学习,但从git的官方页面上了解到,该分支只是散列值的别名。当我试图解决问题1时,我尝试用相同的散列创建两个分支,这是有效的,而且afaik所有提交都将指向正确的分支,所以它做了正确的事情。但是,既然两个分支具有相同的散列值,那么提交应该同时指向两个分支吗?

谢谢, K

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40714
 
1501 次点击  
文章 [ 2 ]  |  最新文章 5 年前
torek
Reply   •   1 楼
torek    6 年前

你要说的关键一点——问题的来源——是 分支名称 一点也不重要,在吉特。他们只是 可移动指针 根据定义,它指向 最后的 在分支中提交。多个名称可以指向任何一个提交。

在Git中,是 提交 那很重要。提交是git的 raison d'être . 提交只需创建一个hash id,因为与git的所有四种对象类型一样,hash id是提交内容的加密校验和。因为每个提交都是唯一的,所以它有一个时间戳来提供帮助,以防发生任何事情 其他的 关于提交的内容与前面的内容相同——每个提交都获取一个新的、唯一的散列ID。

然而,提交散列ID看起来是随机的,人类不可能记住或使用它。所以我们需要一些方法来命名我们想要记住的最新提交。一般来说,就是 分支名称 . 一旦我们有一个提交,我们可以指向它的任意数量的分支名称。

每个提交都会记住其父或父哈希ID,因此我们只需要记住最后一个,或者 提示 ,分支机构的承诺–所有早期的承诺都可以从最后开始并向后工作。因此分支名称标识 提示 只有承诺。

当git创建 新的 提交,git只需将新提交的hash id写入 当前分支 . 当前的分支是哪个分支?答案同样简单:特别的名字 HEAD 保存当前分支的名称。

确保任何有用的git提交 可达成的 因为Git最终会 垃圾收集 任何无法实现的提交。也就是说,如果 xyz 标识提交 a123456... ,该提交受到垃圾收集器的保护。因此,它承诺的父母(或父母),祖父母,等等。git给了您一些时间(默认情况下,14天)来连接对象,以便通过这种可达性思想来保护对象(包括提交):首先创建一个对象,比如blob、树或提交,然后更新任何需要的名称,以便能够找到该对象及其任何祖先。在创建对象之后,14天的窗口是完成名称更新的宽限期。

VonC
Reply   •   2 楼
VonC    6 年前

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

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

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