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

Eri*_*orn 30 linux git

我想删除所有当前目录下的内容除了.git/文件夹之前,我的新文件复制到分支.

什么是linux命令?

CB *_*ley 51

重置索引很便宜,所以

git rm -rf .
git clean -fxd
Run Code Online (Sandbox Code Playgroud)

然后你可以重置索引(带git reset)或直接检查一个新的分支.

  • 这应该是选择的答案 (3认同)
  • 好的!这是我不知道的一个很好的特定于 git 的解决方案,在这种情况下它可能是更好的解决方案。 (2认同)

P̲̳*_*͓L̳ 16

使用find和prune选项.

find . -path ./.git -prune -o -exec rm -rf {} \; 2> /dev/null
Run Code Online (Sandbox Code Playgroud)


编辑:对于两个目录.gitdist

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


cin*_*ada 12

正如Crayon在评论中提到的那样,简单的解决方案就是将.git移出目录,删除所有内容,然后将其移回.但如果你想以奇特的方式做到这一点,那就find得到了回报:

find -not -path "./.git/*" -not -name ".git" | grep git
find -not -path "./.git/*" -not -name ".git" -delete
Run Code Online (Sandbox Code Playgroud)

我放在那里的第一行是因为find在运行之前,我总是想仔细检查以确保它找到了我认为的内容-delete.

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

Edit2:添加-not -name ".git",这使它不会尝试删除.git目录,并抑制错误.根据find尝试删除内容的顺序,它可能会在非空目录上失败.


mu *_*u 無 5

一种方法是使用rm -rf *,它将删除该文件夹中除dotfile和dotfolder之类的所有文件.git。然后,您可以一个一个地删除点文件和点文件夹,这样您就不会错过重要的点文件,例如.gitignore.gitattributes更高版本。

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

mv .git/ ../
cd ..
rm -rf folder/*
mv .git/ folder/
cd folder
Run Code Online (Sandbox Code Playgroud)