2011-02-10 37 views
3

在我們的Mercurial回購協議中,我們添加了一個非常大的文件(並執行了hg推送),然後刪除了大文件(並再次推送)。刪除的文件是否仍然用hg克隆下載?

現在,如果有人沒有一個hg clone是否還會拉下那個大文件?我知道它不會出現在他們的工作目錄中,因爲它已被刪除,但該文件是否仍然會被下拉並存儲在Mercurial內部存儲器中?

我想確保人們不必拉下文件。我瞭解到,真正的大文件應該存儲在Mercurial之外,所以我刪除了該文件。但我想知道是否人們仍然會拉下這個大文件 - 在這種情況下,我想我會從頭開始重新創建存儲庫。

+0

你有沒有`hg rm`這個文件,或者只是刪除它? – 2011-02-10 14:04:54

回答

6

當然,它仍然是在庫中。

可以隨時更新回舊的版本,如果你更新回當你犯下的文件,你得到了修訂,它會在其所有的榮耀在那裏。

有兩種方法來緩解這個(當你提交,而不是現在):

  • 其中一個大的文件擴展名,這些基本上是大文件添加到資料庫二次並鏈接了兩下,因此,如果您更新到文件不存在的修訂版,並且您尚未擁有該文件,它將不會更新。即。它更拉
  • 如果該文件永遠不會改變的「按需」的風格,保持它在網絡上可用,只是創建某種鏈接到它,而不是一個完整副本

現在,你有四個選項:

  • 消除添加文件的變更集以及其後的所有變更集。您可以使用Mercurial Queues擴展來完成此操作。請注意,您需要在所有克隆中進行剝離操作。如果只有一個用戶將其歷史記錄中具有該文件的存儲庫推回到中心克隆,則會返回更改集。
  • 從手動
  • 從頭開始重建庫使用hg convert命令和一些過濾時,--filemap選項可以用於這種
  • 將它保持不變。它有多大,會有很大的問題?

請注意,重建版本庫(手動或通過hg convert將使所有克隆無效)。任何試圖從舊克隆推送到新中央克隆的人都會收到關於unrelated repositories的消息。如果你的任何用戶都是愚蠢的,那麼你就意識到強制推送是一個壞主意,那麼你將會遇到這種方法的問題。

4

是,該文件仍處於歷史。如果您想完全刪除它,則需要使用Mercurial隊列 - 請參閱Mercurial wiki上的Editing History

只要記住這打破克隆作爲修訂版本ID的變化。