2010-12-13 40 views
1

我最近提取從共享git倉庫的幾個子目錄裏
git filter-branch --subdirectory-filter foodir -- --all什麼是git的過濾分支--index過濾後的克隆庫的影響「git的RM ......」

現在我有子目錄仍然留在中央共享存儲庫,我想刪除它們。據我所知,從搜索網絡類似
git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD
應該用於從歷史中刪除舊目錄。

儘管我相信這樣做會有效,但我現在想知道這是否是在共享存儲庫的情況下從歷史記錄中刪除某些內容的最佳方式,因爲我知道每個使用本地克隆的人都必須重新-clone存儲庫?

所以我最終的問題是,我是對這些假設還是有辦法從歷史中的多個分支中刪除目錄,而不必再次克隆存儲庫?

UPDATE
所以我進行了一些測試和當前與此命令運行: git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch -- Dir1 DIR2' --prune-empty --tag-name-filter cat -- --all其作品,但它也完全改變了所有提交所有SHA-1的密鑰,這是可以理解的,但不理想。這意味着每個人都必須重新克隆存儲庫,並通過Gitweb的所有以前的鏈接將打破。

+0

我們現在已經決定只刪除目錄中的文件並提交這些刪除操作,但在歷史記錄的其餘部分中刪除這些文件並不是一個安全問題。但是,如果有人有更好的主意,請仍然回答 – AGrunewald 2010-12-13 16:40:40

回答

1

如果其他人已經擁有它們,你不能默默地改變提交。這就是Git的工作原理,它是一個功能。

+0

我知道這是一個功能,但我想知道實現目標的最不具破壞性的方式是什麼。 – AGrunewald 2010-12-13 15:06:44

+0

'git pull -f'可能是最不具有破壞性的。它會覆蓋當地的歷史。但是,您仍然需要在每個存儲庫中執行此操作。 – Bartosz 2010-12-13 16:44:35