Linux命令删除.git文件夹以外的所有文件?

时间:2014-03-12 00:53:36

标签: linux git

在将新文件复制到分支之前,我想删除.git/文件夹的所有当前目录的内容除外)。

linux的命令是什么?

6 个答案:

答案 0 :(得分:47)

重置索引很便宜,所以

git rm -rf .
git clean -fxd

然后您可以重置索引(使用git reset)或直接检查新分支。

答案 1 :(得分:16)

使用find和prune选项。

find . -path ./.git -prune -o -exec rm -rf {} \; 2> /dev/null

<小时/> 修改:对于两个目录.gitdist

find . -path ./.git -prune -o \( \! -path ./dist \) -exec rm -rf {} \; 2> /dev/null

答案 2 :(得分:11)

正如Crayon在评论中提到的,简单的解决方案是将.git移出目录,删除所有内容,然后将其移回。但如果你想以奇特的方式进行,{{1}得到了你的回复:

find

我放在那里的第一行因为find -not -path "./.git/*" -not -name ".git" | grep git find -not -path "./.git/*" -not -name ".git" -delete ,我总是想在运行find之前仔细检查以确保它找到我的想法。

编辑:有一个脑死亡的时刻,不只是从我的终端复制。

Edit2:添加了-delete,使其无法尝试删除-not -name ".git"目录,并抑制错误。根据{{​​1}}尝试删除内容的顺序,它可能会在非空目录上失败。

答案 3 :(得分:4)

一种方法是使用rm -rf *,它将删除文件夹中的所有文件,除了像.git这样的点文件和点文件夹。然后,您可以逐个删除点文件和点文件夹,这样您就不会错过重要的点文件,例如.gitignore.gitattributes

另一种方法是将.git文件夹移出目录,然后返回并删除文件夹的所有内容并移回.git文件夹。

mv .git/ ../
cd ..
rm -rf folder/*
mv .git/ folder/
cd folder

答案 4 :(得分:2)

for i in `ls | grep -v ".git"` ; do rm -rf $i; done; rm .gitignore;

最后的额外rm会移除特殊.gitignore。如果您确实需要该文件,请将其取消。

答案 5 :(得分:-3)

应找到名称为.git

的所有文件和目录
find .  -name .git

应该找到所有未命名为.git

的文件和目录
find . -not -name .git

删除您找到的所有文件

find . -not -name .git -exec rm -vf {} \;

确保查找正在执行您想要的操作

如果要删除目录,请将rm命令更改为rm -rvf 我包含v选项以查看已删除的文件。

如果要在删除文件之前确认这些文件 将find命令传递给文件并查看结果