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

2022 了,你還不知道 Multi-repo 和 Mono-repo 的區(qū)別么?

開發(fā) 項(xiàng)目管理
大多數(shù)現(xiàn)代項(xiàng)目都是在 Git 上管理和托管的。Git 已經(jīng)成為來(lái)自世界各地的分布式源代碼管理、版本控制和協(xié)作的標(biāo)準(zhǔn)平臺(tái)。

Multi-repo 和 Mono-repo 是 Git 托管代碼的兩種策略,我們討論下兩者的策略以及其利弊。

引言

大多數(shù)現(xiàn)代項(xiàng)目都是在 Git 上管理和托管的。Git 已經(jīng)成為來(lái)自世界各地的分布式源代碼管理、版本控制和協(xié)作的標(biāo)準(zhǔn)平臺(tái)。Git 是快速和高效的,主要有兩種方法來(lái)托管和管理 Git 代碼:

  • Mono-repo
  • Multi-repo

在深入研究這些方法之前,讓我們先了解一下 Repo 是如何工作的。

Repos 是什么?

倉(cāng)庫(kù)(Repo)包含項(xiàng)目的所有文件夾和文件。它還包含關(guān)于用戶、人和計(jì)算機(jī)的信息。

Git 倉(cāng)庫(kù)數(shù)據(jù)受版本控制,Repo 可以由個(gè)人或團(tuán)隊(duì)成員擁有。

Git 倉(cāng)庫(kù)可以是公開的,私人的,或者是內(nèi)部的。GitHub 是 Git 倉(cāng)庫(kù)的一個(gè)托管服務(wù),并且有一個(gè)用戶界面。

Git 提供了版本控制和代碼共享功能,Git 的特別之處在于,如果開發(fā)人員想對(duì)他們的文件做一些修改,他們可以將整個(gè)存儲(chǔ)庫(kù)復(fù)制到他們的本地系統(tǒng)中。因此,即使開發(fā)人員沒有對(duì)特定項(xiàng)目的寫入權(quán)限,他們也可以在本地復(fù)制內(nèi)容并修改它們(我們稱為 forking)。

此外,如果開發(fā)人員希望共享本地所做的更改,他們可以向項(xiàng)目所有者發(fā)送一個(gè) “pull request”。

一個(gè)項(xiàng)目可以只有一個(gè)服務(wù)。如果你的項(xiàng)目有多個(gè)工作流,你可以為每個(gè)工作流創(chuàng)建多個(gè)服務(wù)。大多數(shù)開發(fā)人員喜歡將較大的項(xiàng)目拆分為具有一個(gè)或多個(gè)功能的較小的獨(dú)立服務(wù)。每個(gè)服務(wù)都可以解決各種業(yè)務(wù)問(wèn)題。隨著 serverless 框架的流行,用戶可以將功能作為服務(wù)訪問(wèn)。

一旦你創(chuàng)建了這些函數(shù)——作為服務(wù)并部署它們,下一步就是對(duì)它們構(gòu)造和版本控制——你可以將所有的服務(wù)放在一個(gè)存儲(chǔ)庫(kù)(mono-repo)中,或者為你擁有的每個(gè)服務(wù)擁有一個(gè)單獨(dú)的存儲(chǔ)庫(kù)(multi-repo) !

什么是 Mono-repo?

在 mono-repo 方法中,你可以將所有服務(wù)保存在單一(mono)存儲(chǔ)庫(kù)中。你仍然可以獨(dú)立地部署和管理每個(gè)服務(wù)。這些服務(wù)可以共享公共庫(kù)和代碼。

像 Facebook、 Google 和 Dropbox 這樣的公司都使用 Mono-repo。

Mono-repo 的優(yōu)勢(shì)

Mon-repo 方式有許多優(yōu)點(diǎn):

  • 存儲(chǔ)所有項(xiàng)目代碼的單獨(dú)位置,團(tuán)隊(duì)中的每個(gè)人都可以訪問(wèn)。
  • 易于重用和共享代碼,與團(tuán)隊(duì)合作
  • 很容易理解你的變更對(duì)整個(gè)項(xiàng)目的影響。
  • 代碼重構(gòu)和代碼大變更的最佳選擇
  • 團(tuán)隊(duì)成員可以獲得整個(gè)項(xiàng)目的總體視圖。
  • 易于管理依賴關(guān)系

Mono-repo 的劣勢(shì)

當(dāng)然,Mono-repo 也有一些缺點(diǎn),主要表現(xiàn)在性能上。如果你的項(xiàng)目增長(zhǎng),每隔一天都會(huì)添加更多的文件,那么 git checkout、pull 和其他操作可能變得緩慢,以及文件搜索可能需要更長(zhǎng)的時(shí)間。

此外,如果你為你的項(xiàng)目雇傭了許多獨(dú)立的承包商,那么讓他們?cè)L問(wèn)整個(gè)代碼庫(kù)可能不那么安全。

此外,實(shí)現(xiàn)持續(xù)部署(Continuous deployation,CD)也很困難,因?yàn)樵S多人可以合入他們的更改,而持續(xù)集成(Continuous Integration,CI)系統(tǒng)可能需要進(jìn)行多次重構(gòu)。

使用 Mono-repo 的大公司都有自定義工具來(lái)處理擴(kuò)展問(wèn)題。例如,F(xiàn)acebook 使用自定義文件系統(tǒng)和源代碼控制。

什么是 Multi-repo?

在 Multi-repo 方法中,存在多個(gè)存儲(chǔ)庫(kù),它們承載一個(gè)項(xiàng)目的多個(gè)庫(kù)和服務(wù)。如果服務(wù)發(fā)生更改,開發(fā)人員只需重新構(gòu)建該服務(wù),而不需要構(gòu)建整個(gè)項(xiàng)目。個(gè)人和團(tuán)隊(duì)可以從事他們特定的服務(wù),他們只能訪問(wèn)他們有權(quán)限的服務(wù)。

像 Netflix 和 Amazon 這樣的公司使用 Multi-repo。

Multi-repo 的優(yōu)勢(shì)?

采用 Multi-repo 的公司數(shù)量遠(yuǎn)遠(yuǎn)多于采用 Mono-repo 的公司,原因如下:

  1. 每個(gè)服務(wù)和庫(kù)都有自己的版本控制。
  2. 代碼 checkout 和 pull 是小型且獨(dú)立的,因此即使項(xiàng)目規(guī)模增大,也不存在性能問(wèn)題。
  3. 團(tuán)隊(duì)可以獨(dú)立工作,不需要訪問(wèn)整個(gè)代碼庫(kù)。
  4. 更快的開發(fā)和靈活性。
  5. 每個(gè)服務(wù)都可以單獨(dú)發(fā)版,并有自己的部署周期,從而使 CI 和 CD 更易于實(shí)現(xiàn)
  6. 更好的權(quán)限訪問(wèn)控制——所有的團(tuán)隊(duì)不需要完全訪問(wèn)所有的庫(kù)——需要的時(shí)候,再獲得讀訪問(wèn)權(quán)限

Multi-repo 的劣勢(shì)

  • 跨服務(wù)和項(xiàng)目使用的公共依賴和庫(kù)必須定期同步以獲得最新版本。
  • 某種程度上鼓勵(lì)孤立文化,導(dǎo)致重復(fù)代碼和各個(gè)團(tuán)隊(duì)試圖解決相同問(wèn)題。
  • 每個(gè)團(tuán)隊(duì)可能遵循不同的一組最佳實(shí)踐來(lái)編寫代碼,從而導(dǎo)致難以遵循通用的最佳實(shí)踐。

Mono Repo 和 Multi Repo 的區(qū)別

讓我們來(lái)概括 Mono Repo 和 Multi Repo 的區(qū)別:

Mono-repo

Multi-repo

一個(gè)組織的所有項(xiàng)目的所有代碼都駐留在中央存儲(chǔ)庫(kù)中(譯者:這里感覺可能有點(diǎn)絕對(duì))

每個(gè)服務(wù)和項(xiàng)目都有一個(gè)單獨(dú)的存儲(chǔ)庫(kù)

團(tuán)隊(duì)可以一起協(xié)作和工作; 他們可以看到彼此的變化

團(tuán)隊(duì)可以自主工作; 個(gè)人的變更不會(huì)影響其他團(tuán)隊(duì)或項(xiàng)目的變更

每個(gè)人都可以訪問(wèn)整個(gè)項(xiàng)目結(jié)構(gòu)

管理員可以將訪問(wèn)控制限制到開發(fā)人員需要訪問(wèn)的項(xiàng)目或服務(wù)

如果項(xiàng)目規(guī)模不斷增長(zhǎng),則可能會(huì)出現(xiàn)并放大問(wèn)題

良好的性能,因?yàn)橛邢薜拇a和較小的服務(wù)單元

難以實(shí)現(xiàn)持續(xù)部署(CD)和持續(xù)集成(CI)

開發(fā)人員可以很容易地實(shí)現(xiàn) CD 和 CI,因?yàn)樗麄兛梢元?dú)立地構(gòu)建服務(wù)

開發(fā)人員可以輕松地共享庫(kù)、 api 和其他在中央存儲(chǔ)庫(kù)中更新的公共代碼

對(duì)庫(kù)和其他常見代碼的任何更改都應(yīng)該定期同步,以避免以后出現(xiàn)問(wèn)題

總結(jié)

Mono-repo 和 Multi-repo 同樣流行,哪一個(gè)更好取決于你的項(xiàng)目大小、項(xiàng)目需求以及你需要的版本控制和訪問(wèn)控制級(jí)別。

Mono-repo 側(cè)重一致性,而 Multi-repo 側(cè)重于解耦。在 Mono-repo 中,整個(gè)團(tuán)隊(duì)可以看到某一個(gè)人完成的更改,而 multi-repo 為每個(gè)團(tuán)隊(duì)創(chuàng)建一個(gè)單獨(dú)的 repo,這些團(tuán)隊(duì)只能訪問(wèn)所需的倉(cāng)庫(kù)。如果你想為你的項(xiàng)目使用 mono-repo 和 multi-repo 的組合,你可以使用 meta,一個(gè)管理多個(gè)項(xiàng)目和庫(kù)的工具。

原文地址:Mono-Repo vs Multi-Repo: Throwing Light On Code Repository Strategies

原文作者:Butterfly Thoughts

譯者:Gopal

責(zé)任編輯:武曉燕 來(lái)源: 前端雜貨鋪
相關(guān)推薦

2019-12-24 09:49:02

微軟英語(yǔ)瀏覽器

2016-07-22 17:55:07

云計(jì)算

2023-01-02 10:08:42

StampedLocAQS框架

2022-07-17 06:53:24

微服務(wù)架構(gòu)

2018-09-02 15:43:56

Python代碼編程語(yǔ)言

2020-12-14 07:51:16

JS 技巧虛值

2022-05-05 12:02:45

SCSS函數(shù)開發(fā)

2021-03-18 14:02:56

iOS蘋果細(xì)節(jié)

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2021-10-22 09:41:26

橋接模式設(shè)計(jì)

2021-04-15 12:30:18

ServletSpringMVC 版本

2022-10-12 08:22:44

Guava工具Collection

2021-10-19 14:49:49

CSS前端

2022-01-24 16:42:48

bpftraceLinux工具

2025-02-27 08:33:13

2015-07-13 08:49:54

2020-10-28 08:06:09

Vue3框架數(shù)據(jù)

2024-03-07 07:58:26

Web開發(fā)響應(yīng)媒體查詢工具

2018-07-10 11:33:58

計(jì)算器iPhone刪除
點(diǎn)贊
收藏

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