2016-09-04 87 views
1

在這個從2015年開始的F8 conference video(從8:40開始)中,他們談到了在Facebook上使用Mercurial和單個存儲庫的優點。Mercurial sparse checkout

這是如何工作的?使用Mercurial,我可以檢出一個子目錄(住在SVN中)嗎?如果是這樣,怎麼樣?我需要一個facebook-mercurial-extension這個

P.S:我只對SO發現像2010 thisthis答案哪裏我不知道,如果答案仍與所有的努力申請FB把它付諸表決。

+0

這上帶來了曙光它是如何工作的:https://www.mercurial-scm.org/pipermail/mercurial-devel/2014-June/059425.html –

回答

4

從你的問題來看,如果你正在尋找一個工作流程(monorepo vs multiple repos辯論),或者爲了代碼庫的性能和縮放而不清楚。

對於工作流程,我建議使用google搜索monorepo。它有其優點和缺點,你需要了解你的情況和目前的工作流程來決定。爲了表現和縮放,請繼續閱讀。

remotefilelog的想法是不簽出一個子目錄(如你所說),這個想法是檢查一切。爲了有效地做到這一點,你需要Facebook積極開發的兩個擴展:

  • remotefilelog。這給你一些概念上類似於淺層克隆的東西。這減少了hg clonehg pull時間。
  • fsmonitor(之前稱爲hgwatchman,它現在是mercurial core的一部分)。這大大縮短了本地操作的時間,如hg status。請注意,fsmonitor獨立於remotefilelog。您可以開始試驗這個,因爲它不需要在服務器端進行任何設置。

隨着近來善變(我強烈建議),你可以剃掉使用CommandServer + CHg Python解釋器的額外的啓動時間。

一些其他注意事項:

  • 我廣泛fsmonitor測試。它工作得很好,在巨大的回購時間hg status從10秒減少到不到1秒(並且這1秒的大部分時間是Python啓動時間,參見上面的CHg)。如果您的存儲庫真的很大,您可能需要微調一些inotify內核參數(或MacOSX上的等效參數)。 fsmonitor文檔包含您需要的所有信息。
  • 我沒有測試remotefilelog,雖然我看了一切,我發現它,我相信它的工作原理。取決於開發的方式(每個人總是互聯網連接與否,組織有它自己的主倉庫回購),可能會有一個警告:它將分散的hg部分轉換爲集中的VCS,如svn:通常可以進行的一些操作離線完成(例如:hg log和第一個hg update到過去的變更集)現在需要連接到主存儲庫。
  • 在考慮remotefilelog之前,我在廣泛的回購庫上廣泛使用了largefiles擴展。它具有與remotefilelog相同的缺點,對於想要使用hg只是爲了完成任務而不花時間瞭解其工作原理的用戶,一些令人困惑的角落案例。如果我要管理另一個巨大的回購,我會使用remotefilelog而不是largefiles,儘管它們的用例並不相同。
  • Mercurial也支持subrepositoriesdoc1,doc2)。問題是它根據你在源碼樹中的位置來改變hg的行爲。再說一遍,如果開發者不關心真正理解hg是如何工作的,那就太令人困惑了。

其他信息:

0

我不知道,如果答案仍然與所有FB把 進去

(早期2017年)的努力,鏈接仍然是問題的答案適用(因爲他們偶爾得到更新申請)但請注意,您必須閱讀所有評論和答案。

remotefilelog基本上可以讓按需淺克隆(這樣你就不會獲取歷史一切所有的時間),但你仍然在期望獲取了必要的元數據,以及跨結賬,回購的所有目錄修訂。

使用Mercurial,我可以檢出一個子目錄(SVN中的li [k] e)嗎?如果是這樣,怎麼樣?

https://stackoverflow.com/a/40355673/7836056討論如何使用第三方擴展,允許窄/稀疏檢出(Facebook的sparse.py)或窄克隆(谷歌的NarrowHG)與水銀因此只能從主存儲庫中「創造」一個目錄(儘管根本不同的折衷)。

(注意措辭事項:參照的方式分佈式版本控制使用它來指中心版本控制時不存在時,「疏結賬」是指一個非常具體的行動)