2012-02-08 35 views
2

我們有一個200MB的文件。我們目前使用rsync在其發生變化時在開發人員之間進行傳輸。如果我們將它作爲我們的mercurial存儲庫的一部分包含進來,mercurial只會傳遞像rsync這樣的差異,或者它會在更改時傳輸完整文件嗎?mercurial傳輸完整文件還是僅傳輸差異?

+0

是文件文本或二進制? – 2012-02-08 15:19:51

+0

這是一個大的二進制文件 – HyderA 2012-02-08 15:32:28

回答

5

水銀只傳輸增量當你hg pull。否則分佈式版本控制根本不起作用。

當你hg pull,你的所有的變更在您的本地克隆失蹤。每個變更集只包含一個增量。三角洲可以是小型的或大型的,但如果您對今天發現的rsync三角洲感到滿意,那麼您也應該對Mercurial感到滿意。

關於二進制文件:水銀的確作出承諾時,「文本」和「二進制」文件區分。它們都是相同的處理方式,並且在所有情況下都使用delta壓縮。可以混淆的是,如果文件在每次編輯時都發生根本性變化,則增量壓縮是無用的 - 增量將與文件本身一樣大。在這種情況下,Mercurial實際上存儲了文件的壓縮快照。

+1

+1另外值得一提的是,'汞incoming'也完全下載的變更(或在此情況下,增量)。 – 2012-02-08 15:21:37

+0

就我所知,Mercurial不會爲二進制文件存儲或傳輸三角洲。所以我不認爲這個答案在這種情況下是正確的。 – 2012-02-09 10:43:03

+0

@LaurensHolst:即使對於「二進制」文件,它也會產生增量。我已經更新了答案,以澄清這一點。 – 2012-02-09 11:15:13

2

幾個水銀擴展已處理大文件的寫入。他們通過版本化校驗和來工作,而不是通過對文件本身進行版本控制。

如果您正在使用水銀2.0或更高版本,那麼它包括LargeFilesExtension默認。該文檔解釋了延長的工作原理:

的大型文件擴展允許用於跟蹤水銀大,不可 二進制文件,而無需過多的帶寬 克隆並拉起。作爲大文件添加的文件不會直接由Mercurial跟蹤 ;相反,它們的修訂版本由校驗和 標識,並且Mercurial跟蹤這些校驗和。這樣,當你克隆 倉庫或拉的變更,大文件在老版本庫的 不需要,只更新 到當前版本需要的人下載。這節省了磁盤空間和 帶寬。

也有可以使用其他的擴展。這裏有更多的信息:Handling Large Files

+0

請注意,這是用於大型二進制文件。對於大型文本文件,查看差異可能仍然有用。 – 2012-02-08 15:21:10

+0

+1:大文件擴展名在這裏很有趣。您將避免下載不需要的大文件版本。因此,如果您從版本10下載並更新到版本50,那麼您只能下載大文件以獲得版本50.另一方面,正如Adam指出的那樣,它不會執行任何增量壓縮,因此您最終將下載* full *版本的該文件,因爲它看起來在修訂50.這可能最終會被比下載所有的10三角洲或多或少50 – 2012-02-08 15:38:05

+0

讓人驚訝的是,如果一個有用的擴展,擴展是使用一個像的rsync方法做更新的大文件。 – 2012-02-08 18:47:46