2011-03-14 32 views
7

我的團隊中有人將大文件推送到git服務器,團隊中的每個人現在都擁有大文件的項目克隆。如何永久刪除整個團隊的大文件

我遵循http://help.github.com/removing-sensitive-data/中的指南,它在我的本地源代碼樹以及遠程服務器上都能正常工作。但是一旦其他人從遠程服務器獲取新數據,他將通過向服務器推送新提交來輕鬆地重新引入大文件。

正常情況下,團隊成員會做以下分享他與他人提交:

git fetch origin 
git rebase origin/master 
git push origin 

在「重訂」的步驟,舊的大文件在他的本地提交重新提出。當然,直接的方法是在我刪除大文件後要求團隊中的每個人重新克隆該項目,但不是每個人都樂意這樣做。除了爲每個人重新整理整個項目之外,我正在尋找其他方法。

有什麼建議嗎?謝謝。

+0

我沒有看到他們將如何介紹的巨型對象,如果他們再次推。推只會推送位於old_commit..new_commit中的任何提交中的提交可訪問的對象。 – 2011-03-15 03:40:19

+0

假設您有提交歷史記錄A-B-C-D-E。有些人在提交C中添加大對象。然後刪除對象,從C重寫歷史記錄並強制將新歷史記錄推送到服務器。歷史現在是A-B-C'-D'-E'。另一位成員起初已經克隆了整個項目,他的當地歷史也是A-B-C-D-E。在他提取新的歷史記錄後,本地提交在原始/主文件中分離,即A-B-C'-D'-E,而在主分支上則爲A-B-C-D-E。重新綁定之後,新的歷史就像A-B-C'-D'-E'-C-D-E,然後他推送到服務器 - 舊的提交C被重新引入。 – 2011-03-15 05:18:51

回答

0

如果刪除大文件的執行時間合理,您可以編寫一個腳本來刪除文件,指示所有人在rebase之後在本地運行腳本,並使用掛鉤檢查是否不重新引入該腳本。

3

看看過濾器樹。您需要編輯引入該文件的提交。一旦完成,每個人都可以獲取。這將使其非常快速的遠程分支在其回購協議中 - 每次刪除違規文件後的提交將會有所不同。當他們改變他們在新的遠程分支之上的當前變化時,它不應該再推大型對象。

另一種方法是在git rebase --preserve-merges -i處編輯違規提交。

+0

>「當他們在新的遠程分支上重新設置當前的變化時,它不應該再推動大對象。」 這是我的問題,事實上他們在rebase之後再次重新引入該文件,因爲舊的提交仍然存在於其本地存儲庫中。 – 2011-03-15 02:32:53

+0

如果清除了遠程,請再次克隆。 – 2011-03-15 02:43:00

+0

我知道,但我正在尋找另一種方式,而不是再次克隆它。 – 2011-03-15 02:44:36

0

該progit書有一個精心設計的例子,使用git filter-branch(不是過濾器樹作爲其他職位提到)。本章是這裏

刪除對象http://progit.org/book/ch9-7.html

+0

progit手冊中的指南與http://help.github.com/removing-sensitive-data/相同 – 2011-03-16 01:59:30