神器 git clean

烦人的中间文件

今天介绍一个很有用的命令 git clean.
这个命令用来从工作目录删除untracked的文件。这些文件主要来大型项目的,

  1. 自编译生成的中间文件或者目标文件,或者是
  2. auto-code生成文件
  3. 其他自动生成文件

如果整个项目的结构和build设计的比较好,那么这些文件比较集中,手动删除也无妨。但很多时候,这些经常超出我们的控制范围(如第三方工具的auto code等等,不可描述),会造成大量文件揉在一起,删起来好烦。

下边是我本地的一个例子,这个例子中的垃圾文件是随便拷过来

PS F:\1-own\0-code\0alforithmCode\gnss-sdr-sim\gps-sdr-sim> git st
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add ..." to include in what will be committed)

        ALL_BUILD.vcxproj.filters
        ALL_BUILD.vcxproj.user
        CMakeCache.txt
        ZERO_CHECK.vcxproj
        ZERO_CHECK.vcxproj.filters
        bin/
        cmake_install.cmake
        toRnxApp.sln
        toRnxApp.vcxproj
        toRnxApp.vcxproj.filters
        toRnxApp.vcxproj.user
        ver.h

nothing added to commit but untracked files present (use "git add" to track)

怎么办

正如上边说的,有这么几种处理方式,

  1. 置之不理,就放那也无妨
  2. 当然我们可以把这些玩意儿加到.gitignore里,这样使用git status时眼不见心不烦
  3. 手动删,大多数情况下,如果项目及工具都是我们自己的,那么这些文件会几种在个别一个或者几个目录下,删起来一点儿都不费劲
  4. 使用神器git clean

git clean

  1. 对上边的这个恼人的例子,我们用一下git clean
PS F:\1-own\0-code\0alforithmCode\gnss-sdr-sim\gps-sdr-sim> git clean
fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
  1. 看来要执行git clean -f
PS F:\1-own\0-code\0alforithmCode\gnss-sdr-sim\gps-sdr-sim> git clean -f
Removing ALL_BUILD.vcxproj.filters
Removing ALL_BUILD.vcxproj.user
Removing CMakeCache.txt
Removing ZERO_CHECK.vcxproj
Removing ZERO_CHECK.vcxproj.filters
Removing cmake_install.cmake
Removing toRnxApp.sln
Removing toRnxApp.vcxproj
Removing toRnxApp.vcxproj.filters
Removing toRnxApp.vcxproj.user
Removing ver.h
  1. git status -s看一下
PS F:\1-own\0-code\0alforithmCode\gnss-sdr-sim\gps-sdr-sim> git st -s
?? bin/

原来在没有指定目标路径的情况下,git clean默认不进行递归删除,除非我们用到以下命令
4. git clean -f -d

PS F:\1-own\0-code\0alforithmCode\gnss-sdr-sim\gps-sdr-sim> git clean -f -d
Removing bin/.vs/
Removing bin/ALL_BUILD.vcxproj
Removing bin/ALL_BUILD.vcxproj.filters
Removing bin/ALL_BUILD.vcxproj.user
Removing bin/CMakeCache.txt
Removing bin/CMakeFiles/2e8c9321d4a2a009a8d065bedeacf3ef/
Removing bin/CMakeFiles/3.17.0-rc2/CMakeCCompiler.cmake
  1. 这下干净了
PS F:\1-own\0-code\0alforithmCode\gnss-sdr-sim\gps-sdr-sim> git st -s      
PS F:\1-own\0-code\0alforithmCode\gnss-sdr-sim\gps-sdr-sim>

当然可以用交互模式,

PS F:\1-own\0-code\0alforithmCode\gnss-sdr-sim\gps-sdr-sim> git clean -f -d -i
Would remove the following items:
  ALL_BUILD.vcxproj.user      toRnxApp.sln
  CMakeCache.txt              toRnxApp.vcxproj
  ZERO_CHECK.vcxproj          toRnxApp.vcxproj.filters
  ZERO_CHECK.vcxproj.filters  toRnxApp.vcxproj.user
  cmake_install.cmake         ver.h
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now>

这样,如果我们输入4,那么将会对每个文件确认然后删除或不删除。

你可能感兴趣的:(git)