有关GitHub仓库分支的几个问题

2019 年 1 月 25 日

有关GitHub仓库分支的几个问题

众所周知,GitHub 通过 fork 成为一种超级存储库,让你可以看到 fork 网络中的所有提交,对私人仓库也是如此。举个例子:如果你(Bob)从 Alice 那 fork 了一个仓库P,Alice 在你 fork 后使用散列 X 进行代码提交,你就可以通过 github.com/Bob/P/tree/X 访问这些提交。即使在你的 fork 被删除了以后,仍然可以通过任何分支访问提交,并且这些提交看起来将永远存在。


GitHub 上有人发现这其中存在以下相关问题,并联系了 GitHub。GitHub 说已经知晓了问题,可以将这些问题公开。


问题 1:被移除仓库后仍然能访问这个仓库


在被删除了访问权限后,用户仍然可以继续查看这个仓库中新的提交。这个操作的本意是想在你的访问权限被删除之前可以创建一个私有仓库。但是这样就可以让你通过哈希来访问提交。


根据 GitHub 文档,如果你删除了某人对你的私有仓库的访问权,GitHub 将删除他们的所有分支。对于你在自己账户中 fork 的仓库来说是这样的,但是对于你在组织中 fork 的仓库来说不是这样的。


场景:


  • Alice创建了一个私有仓库p

  • Alice在p中添加了Bob的访问权

  • Bob创建了一个组织,叫B-org

  • Bob将p fork进B-org

  • Alice删除了Bob对p的访问权

  • Alice在p中通过哈希X提交了代码

  • 通过访问github.com/B-org/P/tree/X,Bob能看到用哈希X提交的代码。


Bob 可以通过哈希访问P中的提交。一旦访问到这个提交,你也可以访问其所有的 parent,但不能访问其 children。


还有很多方法可以找到这个仓库的提交:


  • 如果这个仓库的所有者有一个GitHub Pro 账号,所有分支的哈希都会显示在Insights -> Network

  • GitHub允许通过URL中的哈希前缀引用提交,因此可以尝试暴力破解16^4的哈希空间(~65k),从github.com/B-org/P/tree/0000github.com / B-org / P / tree / ffff进行迭代(也可以考虑已有的提交)。也可以通过GitHub API完成,但是有一个配额限制。

  • 如果在GitHub注释中输入哈希值的6位前缀,GitHub将自动链接到提交。目前找不到尺寸限制,似乎可以在一条注释中打包超过几千个哈希。请注意,GitHub提到了反对滥用配额。


请注意,这也适用于组织和团队中的私人仓库,尤其组织需要允许用户 fork 他们的仓库。


如何检查别人是否可以访问我的仓库


经常关注一下自己仓库的 fork 数。如果有 GitHub Pro 的账户,可以在Insights -> Network标签下看到用户名。


问题 2: 仓库所有者对私有仓库有永久访问权


如果你 Fork 了一个私有仓库,并从该 fork 中删除了这个仓库所有者的访问权限,你是希望所有者无法查看你的提交的。但是,他们仍然可以从他们的仓库中查找提交的哈希并创建链接来访问你的提交(像前面提到的一样)。


问题 3:私有仓库和协作者数量的问题


免费组织对私人仓库的数量有限制,免费用户在私人仓库中可以添加的协作者数量有限制。但是,如果免费用户将私人仓库 fork 到组织中,该组织将拥有一个新的私人仓库,那么该组织可以添加他们想要的所有协作者。


参考链接:https://gist.github.com/sarazasasa/9450d63f96e7ff799824fc98fc7f3b43


2019 年 1 月 25 日 08:004702
用户头像
张婵 InfoQ 技术编辑

发布了 87 篇内容, 共 44.4 次阅读, 收获喜欢 210 次。

关注

评论

发布
暂无评论
发现更多内容

聊聊Hystrix中的命令模式

老胡爱分享

Java 设计模式 Java 面试 命令模式

架构师训练营第三周作业

陈靓-哲露

第四周作业

芒夏

极客大学架构师训练营

架构师是怎样炼成的 04-1互联网分布式系统架构演化

闷骚程序员

极客大学架构师训练营

戴尔Latitude 9510 雅典娜计划标准的英特尔移动超能版笔记本

飞天鱼2017

理解了 1+2 的过程,你就理解了Java虚拟机

侯树成

JVM JVM原理

消息队列(五)如何保证消息的顺序性?

奈何花开

Java MQ 消息队列

系统架构的一些思考

jason

Python多重继承问题之MRO和C3算法

王坤祥

Python MRO C3算法 多继承

Golang中的Interface(接口),全面解析

Eriol

golang 接口 interface

极客大学算法训练营第一课

落曦

【6月】本月读书学到了什么

Neco.W

读书感悟 阅读量

架构师训练营:第四周作业

zcj

极客大学架构师训练营

架构师训练营总结-20200627

caibird1984

极客大学架构师训练营

使用 Python 制作酷炫多彩的 Jenkins 插件词云图

donghui2020

jenkins wordcloud

消息队列(四)如何处理消息丢失的问题?

奈何花开

Java MQ 消息队列

架构师训练营 第4周作业

Glowry

极客大学架构师训练营

ARTS - Week Six

shepherd

Java algorithm

一张PDF了解JDK9 GC调优秘籍-附PDF下载

程序那些事

性能调优 GC JDK9 cheatsheet 秘籍

漫画:15张图,帮你看懂布隆算法

Java小咖秀

算法 面试题 布隆过滤器

漫画:对象是如何被找到的?句柄 OR 直接指针?

王磊

Java Java 面试

第四周总结

芒夏

极客大学架构师训练营

计算机操作系统基础(七)---作业管理之死锁

书旅

php laravel 线程 操作系统 进程

前端存储除了 localStorage 还有啥

阿宝哥

Java 前端 存储

架构设计之常识篇

魔曦

架构师 极客大学架构师训练营

「架构师训练营」第 4 周 学习总结

guoguo 👻

极客大学架构师训练营

架构师训练营第四周作业

W_T

架构师训练营作业-20200627

caibird1984

极客大学架构师训练营

极客时间架构师训练营 - week4 - 作业 1

jjn0703

极客大学架构师训练营

架构师训练营第四周作业

Melo

架构师训练营 第4周学习总结

Glowry

极客大学架构师训练营

有关GitHub仓库分支的几个问题-InfoQ