添加/移除Git子模块的问题

10

我想在我的项目中添加一个Git子模块,具体来说是ShareKit。我的项目是一个Git仓库,当我尝试输入以下命令时:

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

在终端中输入时,我收到了一个错误提示,说子模块已经存在。我猜我一段时间前将其添加到该项目中,最终并未使用它并从项目目录中删除它(可能只是删除了子模块文件夹)。所以我尝试执行以下操作:

git rm --cached Submodules/ShareKit

根据如何删除Git子模块,现在当我尝试使用第一个代码添加子模块时,会出现以下情况:
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'?

看起来它卡在某种奇怪的状态下,既坚持子模块存在,又同时不存在。我正在使用终端将子模块添加到Xcode项目中,以免混淆。


3
你已经移除了 .git/modules/Submodules/ShareKit 目录了吗? - iveqy
我不确定如何做那个,就像我说的,我对 git 还比较新。 - lunadiviner
尝试使用rm命令,它是Unix命令。如果您正在使用Windows,请使用Windows资源管理器删除该文件夹。 - iveqy
2个回答

17

尝试以下方法强制 git 重新添加子模块:

git submodule add --force git://github.com/ShareKit/ShareKit.git Submodules/ShareKit
注意在添加后加上 --force。
如果您想完全移除版本控制,请直接删除 .git 和 .gitmodules 文件夹。

我尝试过这样做,但又出现了“'Submodules/ShareKit'已经存在于索引中”的错误,这也是在尝试rm命令之前最初遇到的问题。我想通过删除.git和.gitmodules来解决问题,但是这些文件在我的项目文件夹中在Finder中不可见,即使我使用“git init”重新初始化项目作为git repo。 - lunadiviner
.git和.gitmodules是隐藏文件。除非您告诉Finder将它们显示出来,否则它们将保持隐藏状态。您可以使用终端命令$ rm -r .git .gitmodules来删除它们。 - JBarberU
我最终又运行了 "git rm Submodules/ShareKit",然后按照您上面说的做了,这一次它成功了。我不太确定我到底以什么奇怪的秘密顺序来完成这些操作,但现在它已经在项目中了,这就是我需要的。非常感谢! - lunadiviner
我已经设置了隐藏文件和文件夹显示,这是奇怪的事情。也许我输入命令不正确,没有意识到,我不确定。 - lunadiviner

5
iveqy的评论对我很有帮助,将其发布为答案以增加它的可见性。
只需删除以下文件夹(根据您的子模块路径进行调整):
.git/modules/Submodules/ShareKit
在unix下,您可以使用rm path -rf命令将其删除,或者为了安全起见,将其移动到/tmp目录(它应该会在下次启动时被删除,但是如果您删除了错误的文件夹,这样可以给您时间改变主意):
mv .git/modules/Submodules/ShareKit /tmp/ShareKit-deleted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接