如果子模块可能具有公共父目录,如何从子模块中删除.git文件?

卡迪夫太空人

我有一个子模块集合和一个交付给我的构建脚本。

该脚本.git要从每个子模块中删除该子目录。我的子模块集合包括两个应该在公共目录的子目录中创建的子模块:

细化了一些细节,这代表了其中的内容.gitmodules(以及当前不在以下位置的五个左右其他模块)parent

[submodule "parent/expat"]
        path = parent/expat
        url = /path/to/expat.git
[submodule "parent/build"]
        path = parent/build
        url = /path/to/External.git

该脚本当前包含以下行以删除.git文件:

git submodule foreach --quiet --recursive rm -rf .git

这得到一个错误:

error: pathspec 'parent/build/' did not match any file(s) known to git.
Did you forget to 'git add'?

该脚本已经可以与其他人的子模块集合一起正常工作,因此将仔细研究我提交的任何修复程序。假设我提出的唯一解决方法将无法涵盖当前命令所涵盖的情况。

如果我--recursiveforeach命令中删除该选项,那么在我的情况下,所有不需要的.git目录都将被删除。

这些之一可能是答案:

  • 我可以捍卫自己的零钱吗?当然,如果我的同事出乎意料地使用嵌套子模块,我可能将无法使用。

  • 我可以做一些等效且简单的操作来删除.git目录吗?大概以前的作者知道类似的东西,find . -name .git -exec rm -rf {};并决定在submodule foreach --recursive知情的情况下使用

我也期待着将来,当我将一个更复杂的项目转换为git时。它将共享相同的External.git子模块,expat模块,以及将成为expat模块的同级组件的其他几个模块,当然还有更多的子模块,它们不会在之下parent

VonC

submodule foreach --recursive可能首先执行命令(删除.git),然后尝试查找子子模块...除了它不再在子模块git repo中运行(因为它的.git刚刚被删除)。

find . -name .git -exec rm -rf {};是一个更安全的方法
OP卡迪夫空间侠指出,在意见

find . -name .git -exec rm -rf {};也会失败,因为的其中一个.git是目录,在find通知该目录和find希望访问其子目录之间消失了。
因此它必须是一条find|xargs管道

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除git子模块,但保留文件

公共仓库中的私有文件夹(子模块)

没有 .gitmodules 文件的 git 子模块?

如何从git子模块导入python文件

如何跳过属于git子模块的文件?

如何从主 git 存储库中删除未跟踪的目录树(子模块/子存储库)?

从存储库中删除所有Git缓存的子模块

如何删除git子模块残骸?

从特定分支中删除 git 子模块

Git-如何在子模块中删除未跟踪的文件夹

如何git标记所有子模块?

Git:删除子模块错误

包含 git 子模块和父存储库的单个目录

项目根目录中的 Git 状态显示子模块更改,但在子模块中,没有可用

在git中具有子模块的浅表克隆,如何使用指向提交而不是最新提交?

Git 跨子模块移动文件

如何更新git子模块

在 Git 中调整子模块

如何重新设置git子模块,以保留对包含子模块的git存储库中对子模块提交的引用?

我的Git子模块未加载所有文件

如何添加与旧的,已删除的git目录同名的git子模块?

使用.git目录克隆git子模块

如果未初始化子模块,如何解决git子模块冲突

如何管理 GIT 子模块/树的文件结构?

Git:忽略子模块中未跟踪的文件

git在子模块中时找不到索引(“索引文件打开失败:不是目录”)

git子模块上的Eslint,如何覆盖父配置

是否有可能使git子模块URL指向存储库的子文件夹?

如何在git仓库中将现有目录设为git子模块