repo仓库文件清理

发布于:2025-04-11 ⋅ 阅读:(42) ⋅ 点赞:(0)

1. repo 仓库内文件清理

# 清理所有Git仓库中的项目

repo forall -c 'git clean -dfx'

# 重置所有Git 仓库中的项目

repo forall -c 'git reset --hard'

解释:

repo forall -c 'git clean -dfx'

  • repo forall 是一个用于在所有项目中执行命令的工具。
  • -c 后面跟的是要执行的命令。
  • git clean -dfx 的意思是:
    • -d:移除未跟踪的目录。
    • -f:强制执行清理(需要这个选项才能删除文件)。
    • -x:删除所有未跟踪的文件,包括被 .gitignore 忽略的文件。
  • 综上,这个命令会删除所有未跟踪的文件和目录,确保项目干净。

repo forall -c 'git reset --hard'

  • git reset --hard 会重置当前分支到最新的提交状态,并且会丢弃所有未提交的更改。
  • 这意味着所有本地的更改(包括已暂存和未暂存的)都将被删除,工作目录会恢复到与最后一次提交相同的状态。

总结:

这两个命令的整体作用是将所有项目恢复到最新的提交状态,并清理所有未跟踪的文件和目录。

2. repo 仓库外文件清理

repo status -o | sed -n '/Objects not within a project/,/^\$/p' sed '1d' sed -r 's#[[:space:]]+--[[:space:]]+##' xargs rm -rf

解释:

  1. repo status -o

    • 这个命令列出当前工作目录下的未跟踪对象,显示未跟踪的文件和目录。
  2. sed -n '/Objects not within a project/,/^\$/p'

    • -n 选项告诉 sed 只打印符合条件的行。
    • '/Objects not within a project/,/^\$/' 指定了一个范围,从包含 "Objects not within a project" 的行开始,到第一个空行(即 ^\$)为止。
    • p 命令打印这个范围内的所有行。
  3. sed '1d'

    • 1d 表示删除第一行。由于第一行是 "Objects not within a project (orphans)",这一步将其移除。
  4. sed -r 's#[[:space:]]+--[[:space:]]+##'

    • -r 选项启用扩展正则表达式。
    • s#[[:space:]]+--[[:space:]]+## 表示替换--和前后多个空格为空,只保留文件和目录名。
  5. xargs rm -rf如不删除可不执行此段

    • xargs 将上一步的输出(即要删除的文件和目录名)传递给 rm -rf 命令。
    • rm -rf 是一个危险的命令,会强制删除指定的文件和目录,不会提示确认。

总结:

这个命令链的整体作用是:

  • 从 repo status -o 的输出中提取未跟踪的对象,并删除这些对象,确保只删除对象而不包括标题行。
  • 执行过此命令后最好再执行下repo sync,目前测试下来manifest文件中的软硬链接文件会被删除