【发布时间】:2018-08-22 09:30:52
【问题描述】:
有一些有用的答案如何“本地”删除子模块 - How do I remove a submodule?
但是我有一个问题,我在几台机器上克隆了我的 repo。二 我每个月只工作一两次。因此,当我更新这些分支时,尽管不再跟踪子模块,但文件仍在工作分支上以及 .git/modules 中。在不止一次的情况下,我不小心签入了一些文件。在其他情况下,由于这些不需要的文件/目录的存在,我的构建失败了。
我想我可以保留要删除的内容列表 - 但这似乎不对 - 另一个人会执行删除操作,而我在 git 之外没有要删除的信息吗?
那么清理克隆的建议方法是什么?
更新
对我来说 git --version 返回 git version 2.18.0 似乎是最新的(它是 2018-09-01)。
我添加了一个可重现的示例。
设置
mkdir parent
cd parent
git init
git submodule add https://github.com/jakesgordon/javascript-tetris.git
git commit -am add
cd ..
git clone parent clone
cd clone
git submodule update --init
现在两个目录都包含javascript-tetris/ 中带有签出文件的子模块。 .gitmodules 包含子模块。
当我这样做时
cd parent
git rm javascript-tetris
git commit -am delete
在父目录中,javascript-tetris 已消失,.gitmodules 中的条目已删除。但仍有一个填充的.git/modules/javascript-tetris 目录。
在克隆端:
git pull
给出警告:warning: unable to rmdir 'javascript-tetris': Directory not empty。而且目录还在,.git/modules/javascript-tetris 也还在。
【问题讨论】:
-
你的主要版本和克隆版本使用的是什么版本的 git?我用最新的 Windows 版本做了一些测试,现在子模块的管理似乎好多了。
-
git --version返回git version 2.18.0 -
奇怪,也许我错过了关于你的克隆的一些东西。我的玩具示例似乎有效。 (他们不总是!)
-
难道你错过了
git submodule update --init?这就是我在第一次尝试重现问题时错过的。 -
哇,这真是一团糟——我花了下午的大部分时间来研究 git subtree 是否是一个好的选择——不,我也不喜欢它......
标签: git git-submodules