自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個(gè)讓 Git Clone 提速幾十倍的小技巧

開(kāi)發(fā) 項(xiàng)目管理
不知道大家有沒(méi)有遇到比較大的項(xiàng)目,git clone 很慢很慢,甚至?xí)〉哪欠N。大家會(huì)怎么處理的呢?

[[403380]]

 本文轉(zhuǎn)載自微信公眾號(hào)「神光的編程秘籍」,作者神說(shuō)要有光。轉(zhuǎn)載本文請(qǐng)聯(lián)系神光的編程秘籍公眾號(hào)。

不知道大家有沒(méi)有遇到比較大的項(xiàng)目,git clone 很慢很慢,甚至?xí)〉哪欠N。大家會(huì)怎么處理的呢?

可能會(huì)考慮換一個(gè)下載源,可能會(huì)通過(guò)一些手段提高網(wǎng)速,但是如果這些都試過(guò)了還是比較慢呢?

今天我就遇到了這個(gè)問(wèn)題,我需要把 typescript 代碼從 gitlab 下載下來(lái),但是速度特別慢:

  1. git clone https://github.com/microsoft/TypeScript ts 

等了很久還是沒(méi)下載完,于是我加了一個(gè)參數(shù):

  1. git clone https://github.com/microsoft/TypeScript --depth=1 ts 

這樣速度提高了幾十倍,瞬間下載完了。

加上 --depth 會(huì)只下載一個(gè) commit,所以內(nèi)容少了很多,速度也就上去了。

而且下載下來(lái)的內(nèi)容是可以繼續(xù)提交新的 commit、創(chuàng)建新的分支的。不影響后續(xù)開(kāi)發(fā),只是不能切換到歷史 commit 和歷史分支。

我用我的一個(gè)項(xiàng)目測(cè)試過(guò),我首先下載了一個(gè) commit:

然后做一下改動(dòng),之后 git add、commit、push,能夠正常提交:

創(chuàng)建新分支也能正常提交。唯一的缺點(diǎn)就是不能切換到歷史 commit 和歷史分支。

在一些場(chǎng)景下還是比較有用的:當(dāng)需要切換到歷史分支的時(shí)候也可以計(jì)算需要幾個(gè) commit,然后再指定 depth,這樣也可以提高速度。

大家有沒(méi)有想過(guò),這樣能行的原理是什么?

git 原理

git 是通過(guò)一些對(duì)象來(lái)保存信息的:

  • glob 對(duì)象存儲(chǔ)文件內(nèi)容
  • tree 對(duì)象存儲(chǔ)文件路徑
  • commit 對(duì)象存儲(chǔ) commit 信息,關(guān)聯(lián) tree

以一個(gè) commit 為入口,關(guān)聯(lián)的所有的 tree 和 blob,就是這個(gè) commit 的內(nèi)容。

commit 之間相互關(guān)聯(lián),而 head、branch、tag 等是指向具體 commit 的指針。可以在 .git/refs 下看到。這樣就基于 commit 實(shí)現(xiàn)了分支、tag 等概念。

git 就是通過(guò)這三個(gè)對(duì)象來(lái)實(shí)現(xiàn)的版本管理和分支切換的功能,所有 objects 可以在 .git/objects 下看到。

這就是 git 的原理。

主要理解 blob、tree、commit 這三個(gè) object,還有 head、tag、branch、remote 等 ref。

能下載單個(gè) commit 的原理

我們知道了 git 是通過(guò)某一個(gè) commit 做為入口來(lái)關(guān)聯(lián)所有的 object,那如果我們不需要?dú)v史自然就可以只下載一個(gè) commit。

這樣依然基于那個(gè) commit 創(chuàng)建新的 commit,關(guān)聯(lián)新的 blob、tree 等。但是歷史的 commit、tree、blob 因?yàn)槎紱](méi)有下載下來(lái)所以無(wú)法切回去,相應(yīng)的 tag、branch 等指針也不行。這就是我們下載了單個(gè) commit 卻依然可以創(chuàng)建新的分支、commit 等的原理。

總結(jié)

遇到大的 git 項(xiàng)目的時(shí)候,可以通過(guò)添加 --depth 參數(shù)使得速度極大提升,歷史 commit 越多,下載速度提升越大。

而且下載下來(lái)的項(xiàng)目依然可以進(jìn)行后續(xù)開(kāi)發(fā),可以創(chuàng)建新的 commit 和新的分支、tag,只是不能切換到歷史 commit、分支、tag。

我們梳理了 git 的原理:通過(guò) tree、blob、commit 這三個(gè) object 來(lái)存儲(chǔ)文件和提交信息,通過(guò) commit 之間的關(guān)聯(lián)來(lái)實(shí)現(xiàn)分支、標(biāo)簽等功能。commit 是入口,關(guān)聯(lián)所有的 tree 和 blob。

我們下載了一個(gè) commit,就是下載了他關(guān)聯(lián)的所有 tree、blob,還有一些 refs (包括tag、branch 等),這就是 --depth 的原理。

希望大家在不需要切換到歷史 commit 和分支的場(chǎng)景下可以用這個(gè)技巧來(lái)提升大項(xiàng)目的 git clone 速度。

 

責(zé)任編輯:武曉燕 來(lái)源: 神光的編程秘籍
相關(guān)推薦

2019-03-27 13:45:44

MySQL優(yōu)化技巧數(shù)據(jù)庫(kù)

2022-03-19 23:20:57

加密貨幣安全信息泄漏

2022-04-19 14:03:23

加密貨幣NFT安全

2022-10-27 07:09:34

DjangoAPIRedis

2024-04-19 14:50:00

find文件查找

2023-02-23 10:21:17

ChatGPT人工智能

2023-06-13 13:52:00

Java 7線程池

2024-06-27 11:22:34

2020-09-16 16:07:34

Chrome插件瀏覽器

2009-05-07 09:52:21

英特爾無(wú)線吉比特聯(lián)盟無(wú)線網(wǎng)絡(luò)

2021-05-07 16:02:54

Python代碼優(yōu)化

2021-06-16 10:50:16

Python代碼優(yōu)化

2017-09-26 14:56:57

MongoDBLBS服務(wù)性能

2024-02-26 18:11:08

Docker容器鏡像

2019-11-18 17:45:45

金蝶國(guó)際

2025-03-03 13:12:33

C#代碼Python

2009-12-31 16:15:42

VPN以太網(wǎng)接入技術(shù)

2021-09-06 10:25:27

Python代碼優(yōu)化

2022-10-31 15:50:06

AI發(fā)帖

2025-02-28 14:00:00

結(jié)構(gòu)體C#.NET 9
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)