添加/删除git子模块的麻烦

时间:2013-11-11 20:51:56

标签: git git-submodules

我正在尝试将git子模块添加到我的项目中,特别是ShareKit。我的项目是一个git repo,当我尝试输入

git submodule add git://github.com/ShareKit/ShareKit.git Submodules/ShareKit

进入终端我得到一个错误,说子模块已经存在。我想我刚刚在这个项目中添加了它,并最终没有使用它并且不正确地从项目目录中删除它(最有可能删除子模块文件夹)。所以我试着去做

git rm --cached Submodules/ShareKit

根据How do I remove a submodule?,现在当我尝试使用第一位代码再次添加子模块时,我得到了这个:

A git directory for 'Submodules/ShareKit' is found locally with remote(s):
origin  git://github.com/ShareKit/ShareKit.git
If you want to reuse this local git directory instead of cloning again from
git://github.com/ShareKit/ShareKit.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.

而且我不确定该怎么做。我对git很新,我需要在我的项目中得到这个 - 有没有办法只是擦除项目中的所有git并从头开始?我只是用一个新项目做到这一点,但除此之外它已经非常完整,从头开始并将所有内容复制完毕将非常耗时。我让ShareKit在测试应用程序中工作,安装正确,有什么理由我不能将该文件夹中的所有ShareKit文件复制到我需要的文件夹中吗?

编辑:我试过了

git submodule deinit Submodules/ShareKit

这给了我这个错误:

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

它似乎陷入某种奇怪的状态,它坚持子模块同时存在和不存在。我正在使用Terminal将子模块添加到Xcode项目中,只是为了澄清。

2 个答案:

答案 0 :(得分:11)

尝试以下操作强制git重新添加子模块:

git submodule add --force git://github.com/ShareKit/ShareKit.git Submodules/ShareKit

注意添加后的--force。

如果您想完全删除版本处理,只需删除.git和.gitmodules。

答案 1 :(得分:3)

iveqy的评论为我做了诀窍,将其作为答案发布,以便更加明显。

只需删除以下文件夹(使用子模块的路径进行调整):

.git/modules/Submodules/ShareKit

您可以在unix下使用rm path -rf删除它,或者为了安全起见只需将其移至/tmp(它应该在下次启动时删除,但如果您删除了它,则会让您有时间改变主意错误的文件夹):

mv .git/modules/Submodules/ShareKit /tmp/ShareKit-deleted