You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将子目录中特定扩展名文件加入Git仓库而不包含子目录

我来帮你解决这个问题——要把仓库里的子目录去掉,只保留三个cpp文件在根目录,其实分几步就能搞定:

步骤1:把需要的cpp文件移到仓库根目录

首先,在你的REPO目录下,执行以下命令把sub1和sub2里的目标cpp文件移动到根目录:

mv sub1/2.cpp .
mv sub2/3.cpp .

执行完成后,仓库根目录就会同时存在1.cpp、2.cpp、3.cpp三个文件了。

步骤2:从Git仓库中移除sub1和sub2目录

既然需要的文件已经移出来,现在可以彻底删除这两个冗余目录,同时让Git记录这个删除操作:

git rm -r sub1 sub2

这个命令会删除本地的sub1、sub2目录,并且告诉Git不再跟踪这两个目录及其剩余内容。

步骤3:配置.gitignore确保只跟踪cpp文件

接下来创建或更新你的.gitignore文件,让它自动忽略所有非cpp文件和目录,只保留我们需要的文件:

# 忽略所有文件和目录
*
# 例外:允许所有.cpp后缀的文件
!*.cpp
# 例外:不要忽略.gitignore本身(否则Git不会跟踪这个配置文件)
!.gitignore

这样以后任何新创建的文件或目录,只要不是.cpp后缀,都会被自动忽略,不会被意外纳入仓库。

步骤4:提交所有更改

最后,把这些变更提交到仓库,完成整个调整:

git add .
git commit -m "Move core cpp files to root, remove unused subdirectories, update gitignore"
可选:彻底清除历史中的子目录(谨慎操作)

如果你的仓库已经有提交历史,并且你希望彻底从历史记录中移除sub1、sub2目录及其中的其他文件(注意:这个操作会改写Git历史,如果你和其他人协作,一定要提前沟通确认),可以使用git filter-repo工具:

git filter-repo --path sub1 --path sub2 --invert-paths

这个命令会遍历所有历史提交,移除涉及sub1和sub2目录的变更,只保留三个cpp文件的历史记录。

这样操作完成后,你的仓库就只会保留根目录下的三个cpp文件,不会有任何子目录啦!

内容的提问来源于stack exchange,提问作者Mohamed Magid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:51:21