git clean仅跟踪文件

时间:2016-06-13 02:49:40

标签: git gitignore

这是一个非常不寻常的用例,但我想从git repo中删除所有跟踪的文件。是的,跟踪的文件,而不是未跟踪的文件。

我有一大堆代码生成文件,其中一些是二进制文件文件。我希望能够跟踪文本生成文件的历史记录。我有忽略列表设置等。问题是,下次我运行生成过程时,它将更改所需的文件,添加新文件,但它不会删除不再生成的旧文件。删除整个工作树会有效,但它也会删除已存在的二进制文件和其他文件,我不想这样做。

如果我可以选择使用git来清理被跟踪的文件,那么最好使用已经准备好的复杂.gitignore文件来区分文件,但我在文档中没有看到任何内容。

如果从工作树中删除所有被跟踪的文件,是否存在棘手或无法选择。

2 个答案:

答案 0 :(得分:1)

如果您想删除master分支中版本控制下的每个文件,那么您可以尝试:

git ls-tree -r -z master --name-only | xargs -0 git rm

管道之前的命令的第一部分以递归方式查找master中已版本化的所有文件,git rm从远程存储库中删除每个文件。

git rm <file>删除远程存储库跟踪的文件。

答案 1 :(得分:0)

您可以将空树与工作树更新合并:

git read-tree -m -u $(git mktree < /dev/null)