2014-10-07 166 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

相关问题