成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Github 的清點對象算法

開發(fā) 開發(fā)工具 算法
這個過程非常慢,根據(jù)Github的披露,像Linux kernel這樣巨大的庫,清點一次需要8分鐘!也就是說,發(fā)出git clone命令后,會干等八分鐘,然后才會開始真正的數(shù)據(jù)傳輸。這當然是無法忍受的。Github團隊一直想解決這個問題。

使用 Github 的時候,你有沒有見過下面的提示?

  1. $ git clone https://github.com/torvalds/linux 
  2. Cloning into 'linux'... 
  3. remote: Counting objects: 4350078, done. 
  4. remote: Compressing objects: 100% (4677/4677), done. 
  5. Receiving objects:   4% (191786/4350078), 78.19 MiB | 8.70 MiB/s 

這段提示說,遠程代碼庫一共有4350078個對象需要克隆。

這就叫”清點對象”(counting objects),Github需要實時計算出來,需要克隆的對象總數(shù)。

這個過程非常慢,根據(jù)Github的披露,像Linux kernel這樣巨大的庫,清點一次需要8分鐘!也就是說,發(fā)出git clone命令后,會干等八分鐘,然后才會開始真正的數(shù)據(jù)傳輸。這當然是無法忍受的。Github團隊一直想解決這個問題。

后來,他們終于發(fā)現(xiàn)了一種新的算法,現(xiàn)在清點一次只要3毫秒!

為了理解這個算法,你必須先知道,什么是Git的對象。簡單說,對象就是文件,最重要的對象有三種。

  • 快照對象(Commit)

  • 目錄對象(Directory)

  • 文件對象(File)

每次提交代碼的時候,會生成一個commit對象,里面有對應的當前”目錄對象”的名字。”目錄對象”保存了代碼根目錄所含有的子目錄和文件信息。每一個子目錄就是另一個”目錄對象”,每一個文件則是”文件對象”,里面是具體的文件內(nèi)容。

所以,”清點對象”就是清點各種commit、目錄、文件等。git clonegit fetch操作都需要清點對象,因為需要知道,到底下載哪些對象文件。

清點對象的原始算法如下。

  1. 列出本地所有分支***的一個commit

  2. 列出遠程所有分支***的一個commit

  3. 兩者進行比較,只要有不同,就意味著分支發(fā)生變動

  4. 每一個發(fā)生變動的commit,都清點其中具體變動的子目錄和文件

  5. 追溯到當前commit的父節(jié)點,重復第四步,直至本地與遠程的歷史一致為止

  6. 加總所有需要變動的對象

上面的過程說明,”清點對象”是一個文件遍歷算法,變動的對象會被一一清點到,這就意味著大量的文件讀操作。對于大型代碼庫來說,這個過程非常慢。

Github團隊想到的新算法,是建立一個Bitmap索引,即為每一個commit生成一個二進制值。

打開本地Github倉庫的.git/objects/pack/目錄,你會看到一個索引文件和一個數(shù)據(jù)文件,它們就是Bitmap。簡單說,這兩個文件索引了當前代碼庫的所有對象,然后使用一個二進制值代表這些對象。有多少個對象,這個二進制值就有多少位。它的第n位,就代表數(shù)據(jù)文件里面的第n個對象。

每個commit都會有一個對應的二進制值,表示當前快照包含的所有對象。這些對象對應的二進制位都為1,其他二進制位都為0。

這樣做的好處是,不用讀取commit對象,只要讀取這個二進制值,就會知道當前commit包含了哪些節(jié)點。更妙的是,兩個二進制值只要做一次 XOR運算,就會知道哪些位(即哪些對象)發(fā)生了變動。而且,因為新的對象總是添加到現(xiàn)有二進制位的后面,所以只要讀取多出來的那些位,就知道當前 commit比上一次commit多出了哪些對象。

這樣一來,”清點對象”就變成了二進制值的比較運算,因此速度極快。進一步的介紹,請參看官方文檔《Bitmap的解釋》《Bitmap的格式》

目前,Github的生產(chǎn)環(huán)境已經(jīng)部署了這套算法,用戶再也不用為了清點對象,而苦苦等待了。而且,Github團隊還把它合并進了Git,這意味著,從此所有Git實現(xiàn)都可以使用Bitmap功能了,因此將來肯定還會有更多好玩的用法出現(xiàn)。

責任編輯:王雪燕 來源: 阮一峰的網(wǎng)絡日志
相關推薦

2015-10-08 08:44:23

阮一峰Github清點對象

2021-11-03 15:01:50

算法開源技術

2023-08-07 08:20:27

圖解算法工具

2020-05-26 16:31:53

算法可視化Github

2022-02-25 10:03:11

對象數(shù)據(jù)算法

2021-08-03 09:02:58

LinuxSlab算法

2014-09-01 09:49:24

github

2013-08-09 10:41:58

2019-01-04 13:25:40

代碼開發(fā)算法

2016-11-21 15:22:47

GitHub操作開源

2021-07-05 10:00:17

GitHub代碼AI

2018-03-24 20:27:58

GitHub代碼開發(fā)者

2022-11-03 15:10:24

前端數(shù)據(jù)結構算法

2019-04-28 09:36:11

GitHub代碼開發(fā)者

2020-03-27 12:00:14

GitHub開源移動應用

2021-04-28 10:46:47

微軟GitHub 開源

2020-05-14 14:54:00

GitHub星級開源

2016-12-19 08:52:01

GitHubissue開源

2022-12-21 08:20:01

2019-06-12 10:18:03

GitHub代碼開發(fā)者
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线一级片 | 亚洲成人免费电影 | 亚洲国产一区二区三区在线观看 | 99自拍视频 | 国产精品一区视频 | 久久精品亚洲精品国产欧美 | 精品一区二区三区入口 | 一区二区三区回区在观看免费视频 | 国产一区日韩在线 | 欧美国产亚洲一区二区 | 97久久精品午夜一区二区 | 91久久国产综合久久91精品网站 | 久久久久久久网 | 欧美一级二级三级视频 | www.夜夜草 | 一级片aaa| 成人看片在线观看 | 亚洲成人av在线播放 | 亚洲国产成人精品女人 | 精品日韩一区二区 | 欧美亚洲成人网 | a网站在线观看 | 日韩精品一区二区三区视频播放 | 国产一区二区日韩 | 国产91在线播放 | 91色视频在线观看 | 国产精品亚洲视频 | 欧美色视频免费 | 欧美精品啪啪 | 日韩色在线 | 欧美日韩视频在线 | cao在线| 91成人在线 | 91在线一区二区三区 | 亚洲一区视频 | 亚洲视频在线观看 | 成人黄在线观看 | 在线黄色影院 | 国产精品日日摸夜夜添夜夜av | 久久国产精品一区二区三区 | 午夜爽爽爽男女免费观看 |