社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

新github分支的sha/hash

Trouble • 5 年前 • 1409 次点击  

刚开始使用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
 
1409 次点击  
文章 [ 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 .