如何将子目录中特定扩展名文件加入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
相关产品推荐
相关产品推荐

