首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用git filter-branch删除除一个子目录之外的所有目录

使用git filter-branch命令可以删除除一个子目录之外的所有目录。该命令可以重写Git历史,对每个提交进行修改。

具体操作步骤如下:

  1. 首先,进入要操作的Git仓库所在的目录。
  2. 执行以下命令,将除指定子目录外的所有目录都删除:
代码语言:txt
复制

git filter-branch --tree-filter 'rm -rf $(ls | grep -v <子目录名>)' --prune-empty HEAD

代码语言:txt
复制

其中,<子目录名>是要保留的子目录名称。

  1. 执行以上命令后,Git会遍历每个提交,并在每个提交上执行指定的命令。这里使用rm -rf命令删除除指定子目录外的所有目录。
  2. 等待命令执行完成,Git会重写历史并删除相应的目录。

需要注意的是,使用git filter-branch命令会修改Git仓库的历史记录,因此在执行该命令前应谨慎备份仓库,以防止意外情况发生。

这种操作适用于需要清理或重构Git仓库历史,只保留特定子目录的情况。

腾讯云相关产品推荐:

以上是对于使用git filter-branch删除除一个子目录之外的所有目录的完善且全面的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用Shell脚本遍历子目录所有文件方法

最近博客进行了搬家,CDN源发生改变,想着在CDN上将博客所有图片刷新预热一遍,那么问题来了,刷新预热需要得到所有图片地址,于是直接使用Shell脚本递归遍历wp-content/uploads目录先得到图片文件路径...创建Shell脚本 使用vi编辑器,先创建一个vi traveDir.sh文件,复制下面的脚本代码: #!...read_dir $1 别忘记给脚本添加执行权限chmod +x traveDir.sh 使用方法 上一个步骤已将脚本创建完毕,接下来只需要执行....11/snipaste_20191110_102750.png这个样子,直接使用文本工具,将/data/wwwroot/xiaoz.me/批量替换为您自己域名,然后将URL提交到CDN服务商进行刷新预热...总结 脚本批量导出文件路径 文本工具将站点根目录批量替换为自己域名 提交URL刷新 脚本比较简单,网上一搜一大把,此文参考了:使用Shell遍历目录及其子目录所有文件方法

1.4K20

如何使用PQ获取目录所有文件夹名(不含文件和子目录)

今天想把之前发布Power BI示例文件文件夹做一个表出来,只获取该目录所有文件夹名,并不包含其中各种文件和子目录。 ? 因为每个文件夹中都包含多个文件,甚至还有子文件夹: ?...所以如果直接用“从文件夹获取数据”方式,PowerQuery会使用Folder.Files函数: ? Folder.Files会将所选目录所有文件路径罗列出来: ?...这样我们就得到了根目录所有文件夹名,和文件名。尤其是,空文件夹这里也出现了。 接下来就是从列表中只返回文件夹名。...如果根目录下还有一个无拓展名文件,那么,仅仅筛选extension为空的话,就会多余一行数据: ? 所以需要其他办法,展开attribute选择directory: ? 点击确定后: ?...再筛选TRUE行: ? 意思是查看属性,然后筛选那些是“目录行。 这样,就将该目录所有文件夹名获取到了。

6.8K20

Git 基础命令

新建代码库 #在当前目录新建一个 git 代码库 $ git init #新建一个目录,将其初始化为 git 代码库 $ git init [project-name] #下载一个项目和它整个代码历史...#添加指定目录到暂存区,包括子目录 $ git add [dir] #添加当前目录所有文件到暂存区 $ git add ....$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD # 使一个子目录作为新目录:假设已经从另一个源代码控制系统中导入,并且有几个没意义子目录...如果想要让 trunk 子目录作为每一个提交项目根目录filter-branch 也可以帮助你那么做,再在新项目根目录是 trunk 子目录Git 会自动移除所有不影响子目录提交。...需要小心是只修改你自己邮箱地址,所以使用 --commit-filter 来修改: $ git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL

45630

Git目录为什么这么大

HEAD:表示当前本地签出分支 hooks:git子目录,关于钩子使用可以参考我之前文章 利用Git钩子实现代码发布 index: 存储缓冲区GitExtensions中stage...删除文件仍然在Git仓库中保存着。直接删除文件并提交起不到给Git仓库瘦身效果 在Git仓库彻底删除一个文件只有一种办法:重写Rewrite涉及该文件所有提交。...借助 git filter-branch 便可以重写历史提交,当然这也是Git中最危险操作 2.3 如何彻底删除一个文件 以一个文件提交为例,这个文件可能会关联很多次提交,只有将每一次与该文件有关提交记录进行重写...commit对象,该commit包含两个文件 查看.git/objects目录,可以看到该目录下增加了4个子目录 32,3b, 4c, ca,d2,每个子目录下有一个以一长串字母数字命名文件 # tree...Git为对象生成一个文件,并根据文件信息生成一个SHA-1哈希值作为文件内容校验和,创建以该校验和前两个字符为名称子目录,并以 (校验和) 剩下38个字符为文件命名 ,将该文件保存至子目录下 可以通过

1.2K10

把某个git子目录迁移到新repo目录

对项目重构时有这样一个需求,1)要把代码库某个目录所有代码作为一个新代码库目录,2)并且之前所有的代码提交记录要一并迁移到这个新git repo。...当你尝试用 git filter-branch --subdirectory-filter YOUR_SUB_DIR -- --all 来解决问题时,会看到一个警告推荐我们使用 git filter-repo...它是一个用于重写git history多功能小工具,用法参考filter-repo使用手册。我们需求在这里只是它一个小case。...filter-repo 命令,让某个子目录成为新repo目录。...git push -uf origin maste 7)把所有branchs/tags都push上去 git push --all origin 这时在新git repo里应该能看到原来项目的子目录代码所有

33020

公司敏感数据被上传Github,吓得我赶紧改提交记录

最近公司发生了一个事故,有同事不小心把敏感数据上传到了GitHub上,结果被安全部门扫描出来了。这件事导致公司对所有员工进行了一次数据安全培训。...设置用户信息 Git进行版本控制时候,每次代码提交记录中都包含用户用户名和邮箱,这些信息在你进行每一次提交时都会被记录下来。我们保不齐会错误地使用了错误信息,或者需要改用另一个邮箱地址。...config --global -l 特定仓库 如果你只想修改某个特定仓库用户信息,可以在特定仓库目录下进行如下操作,Git会将设置得用户名和邮箱仅应用于当前仓库。...全局修改邮箱地址; 从每一个提交中移除一个文件; 使一个子目录做为新目录 用法 历史提交记录中有很多用户名xiaofu提交记录,现在使用filter-branch批量将他们改写成程序员小富。...,洁面简洁使用也很方便,主打一个轻量。

13010

公司敏感数据被上传Github,吓得我赶紧改提交记录

最近公司发生了一个事故,有同事不小心把敏感数据上传到了GitHub上,结果被安全部门扫描出来了。这件事导致公司对所有员工进行了一次数据安全培训。...我们保不齐会错误地使用了错误信息,或者需要改用另一个邮箱地址。那这种情况,我们就需要更改我们提交记录中用户名和邮箱。可以通过全局设置或者特定仓库设置两种方式来修改我们提交时用户信息。...--global -l特定仓库如果你只想修改某个特定仓库用户信息,可以在特定仓库目录下进行如下操作,Git会将设置得用户名和邮箱仅应用于当前仓库。...全局修改邮箱地址;从每一个提交中移除一个文件;使一个子目录做为新目录用法历史提交记录中有很多用户名xiaofu提交记录,现在使用filter-branch批量将他们改写成程序员小富。..."$@"; else git commit-tree "$@"; fi' HEAD为了方便操作,创建一个脚本modifyCommit.sh,放在项目的根目录执行

24710

防止 Git 泄漏 5 种最佳做法

gitignore 是一个 Git 配置文件,它列出了不会被存入 Git 仓库文件或目录。...git clone --mirror git://example.com/need-clean-repo.git 我们需要执行 git filter-branch 命令来从所有分支中删除数据并提交历史记录...git filter-branch 更快、更简单用于删除敏感数据替代方法。...通常比 git filter-branch 快 10–720 倍。删除文件外,BFG 还可以用于替换文件中机密信息。 BFG 保留最新提交记录。它是用来防止我们犯错误。...整个过程需要一些时间才能完成,但这是删除所有副本唯一方法。 总结 不要犯无数人犯过错误。尽力避免发生安全事故。 使用上面提到这些工具和策略将有助于避免 Git 泄漏。

1.8K10

如何删除Git仓库中敏感文件及其历史记录

本文主要介绍如何使用 git filter-branch 命令删除 Git 仓库中敏感文件及其历史记录。...背景 因为我开一个项目的时候习惯先使用私有仓库,当完善差不多时候再转为公开,私有库就随便了些,可能存在一些不合适公开一些信息,所以需要在转为公开仓库前检查删除一些内容。...2.3 运行git filter-branch 进入仓库目录使用 git filter-branch 命令删除敏感文件及其历史记录。...这将覆盖所有分支和标签。 git push --force 完成以上步骤后,敏感文件及其历史记录将从Git仓库中删除。 请注意,这种方法可能导致其他协作者仓库出现问题。...如果你是一个使用,那就无所谓了。 3. 结论 本文介绍了如何使用 git filter-branch 命令手动删除Git仓库中敏感文件及其历史记录。

22440

测试开发必会12个Git高级命令

克隆一个特定远程分支 如果想要从远程仓库中克隆一个特定分支该怎么做呢?通常你会使用git clone,不过这么做会将所有其他分支都一并克隆下来。...将子目录分隔为新仓库 有时,你可能需要将Git仓库中某个特定目录转换为一个全新仓库。...(89/89) Ref 'refs/heads/master' was rewritten 现在,仓库会包含指定子目录所有文件。...虽然之前所有文件都会被删除,但他们依旧存在于Git历史中。现在可以将新本地仓库推送到远程了。 10....将项目文件打成tar包,并且排除.git目录 有时,你需要将项目副本提供给无法访问GitHub仓库外部成员。最简单方式就是使用tar或zip来打包所有的项目文件。

85420

从仓库中移除敏感信息

要从仓库历史记录中完全删除不需要文件,你可以使用 git filter-branch命令或 BFG Repo-Cleaner。...我们建议在从仓库中删除文件之前合并或关闭所有打开请求。 你可以使用 git rm 从最新提交中删除文件。...有关删除使用最新提交添加文件信息,请参阅“从仓库历史记录中删除文件” 警告:一旦你推送了一个提交到 GitHub,你应该考虑它包含任何数据都会被泄露。如果你提交了密码,请更改密码!...从仓库历史中清除文件 使用 BFG BFG Repo-Cleaner 和 git filter-branch 类似,用于删除不需要文件,是一种更快速、更简单替代方法。...经过一段时间,你确信 git filter-branch 没有意外副作用,你可以强制你本地仓库中所有对象被解除引用和垃圾收集,使用下面的命令(使用Git 1.8.5或更新版本): git for-each-ref

91420

2023-03-27:avio_list_dir.c 是 FFmpeg 库自带一个示例程序,它提供了列出目录所有文件和子目录

2023-03-27:avio_list_dir.c 是 FFmpeg 库自带一个示例程序,它提供了列出目录所有文件和子目录功能,请用go语言改写。...答案2023-03-27: 这段代码实现了通过 AVIOContext 列出指定目录文件和子目录,并打印出它们名称、大小、类型、权限等信息。...3.循环调用 AVIODirContext.AvioReadDir() 方法读取目录文件和子目录,每次读取到一个目录项后,输出该目录信息。如果已经读取完所有目录项,则退出循环。...4.输出格式化目录项信息,包括类型、大小、名称、权限等。...而 Windows 平台上不支持 AVIOContext,因此无法使用该方法列出目录文件和子目录。 代码见github/moonfdd/ffmpeg-go。 执行命令: go run .

20020

删除Git仓库中大文件

即使使用git rm命令删除当前cnn.model文件,.git目录中还是记录有这个大文件记录,因此后面别人clone这个项目后,项目还是很大。...因此这里需要使用git filter-branch命令来删除.git目录文件记录: $ git filter-branch --index-filter 'git rm -r --cached -...使用--all则显示所有的提交,而不是某次特定提交下对象信息。...first commit 重写所有修改这个文件提交 找到所有修改这个对象commit后,我们找到最早修改,然后使用git filter-branch命令来操作,具体如下: $ git filter-branch...,直接从所有提交中删除这个对象: $ git filter-branch --index-filter 'git rm --cached --ignore-unmatch data/model-400M.caffemodel

5.9K50
领券