2014-10-07 165 views
0

我們有幾個項目帶有公共/上傳的目錄,客戶用它來存儲images/pdfs/etc等,這些目錄存在於每個項目庫中(隨着我們剛剛移動到/正在學習git而添加)我現在希望添加到.gitignore。無法從Git歷史記錄中刪除目錄

我試圖刪除「開發」分支中的單個項目中的目錄作爲測試。

我使用的命令:

git filter-branch --tree-filter "git rm -rf --cached --ignore-unmatch public/uploaded" 

生成輸出這樣的:

rm 'public/uploaded/image_1.jpg' 
rm 'public/uploaded/image_2.jpg' 
rm 'public/uploaded/image_3.jpg' 
rm 'public/uploaded/image_4.jpg' 
rm 'public/uploaded/image_5.jpg' 

與然而結尾:

WARNING: Ref 'refs/heads/develop' is unchanged 

爲什麼這個命令不工作,和我怎樣才能成功地從歷史記錄中刪除目錄,但在添加到.gitignore之前保留這些文件?

+0

請注意,git不會跟蹤目錄。一旦你從特定的目錄中刪除所有文件,它會自動從git中消失。換句話說,在git中不可能跟蹤空目錄 – mvp 2014-10-07 00:29:46

回答

0

您正試圖將在索引上運行的--cached與使用工作目錄的--tree-filter結合使用。

嘗試

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch public/uploaded" 

您也可以考慮加入 「--prune空」。

+0

謝謝。這工作。這是因爲--tree-filter檢出或提交工作目錄,將當前存在的文件放入舊提交中? – 2014-10-07 01:31:46

+0

我相信tree-filter會提交你的工作目錄的狀態,這在你原來的例子中沒有改變。如果你刪除了'--cached',它也可以工作,但索引過濾器的形式比樹形過濾器快得多。 – 2014-10-07 01:33:20

相關問題