Issue with adding common code as git submodule: “already exists in the index”
我是git的新手,不胜感激添加子模块的帮助。
我收到了两个共享一些通用代码的项目。 共享的代码仅被复制到两个项目中。 我为通用代码创建了一个单独的git repo,并将其从项目中删除,并计划将其添加为git子模块。
我使用git子模块添加的path选项来指定文件夹:
1 | git submodule add url_to_repo projectfolder |
但随后出现错误:
1 | 'projectfolder' already exists in the index" |
这是我的存储库的所需结构:
1 2 3 | repo |-- projectfolder |-- folder with common code |
可以将git子模块直接添加到存储库中,也可以添加到新文件夹中,但不能添加到项目文件夹中。 问题在于它确实需要在项目文件夹中。
我该怎么办?我对git submodule add的path选项有什么误解?
恐怕您的问题中没有足够的信息来确定正在发生的事情,因为您尚未回答我的后续问题,但这在任何情况下都可能会有所帮助。
该错误意味着
1 | git ls-files --stage projectfolder |
该输出的第一列将告诉您
我怀疑您会看到类似以下内容:
1 | 160000 d00cf29f23627fc54eb992dde6a79112677cd86c 0 projectfolder |
(即以
1 | git rm --cached projectfolder |
...取消登台,然后:
1 | git submodule add url_to_repo projectfolder |
...将存储库添加为子模块。
但是,您也可能会看到列出了许多斑点(文件模式为
1 | git rm -r --cached projectfolder |
...然后使用以下方式添加子模块:
1 | git submodule add url_to_repo projectfolder |
手动删除子模块涉及许多步骤,这对我有用。
假设您位于项目的根目录中,并且示例git模块的名称为" c3-pro-ios-framework"
删除与子模块关联的文件
1 | rm -rf .git/modules/c3-pro-ios-framework/ |
在配置中删除对子模块的任何引用
1 | vim .git/config |
删除.gitmodules
1 | rm -rf .gitmodules |
从缓存中删除它,而没有" git"
1 | git rm --cached c3-pro-ios-framework |
添加子模块
1 | git submodule add https://github.com/chb/c3-pro-ios-framework.git |
我遇到了同样的问题,经过数小时的查找后找到了答案。
我得到的错误有所不同:
解决方案是不要创建将包含子模块的目录。该目录将作为
另外,该参数应相对于parent-repo根目录,而不是您的工作目录,因此请注意这一点。
上面示例的解决方案:
我希望这对某人有帮助,因为在其他地方几乎找不到这方面的信息。
您首先需要删除git路径的子模块git存储库(在这种情况下为projectfolder)。
1 2 3 | rm -rf projectfolder git rm -r projectfolder |
然后添加子模块
1 | git submodule add <git_submodule_repository> projectfolder |
如果在git的控制下有一个名为
由@ ujjwal-singh更新:
只是要用人类语言来说明错误试图告诉您什么:
您不能在此文件夹中创建已经在主存储库中跟踪的存储库。
例如:您有一个名为
您只需要确保主存储库的版本跟踪中没有
因此要解决,如果您的主存储库中有一个
1 2 | git filter-branch --index-filter \ 'git rm -r --cached --ignore-unmatch sites/theme/AwesomeTheme' HEAD |
现在您可以运行
由于主存储库以前从未在
我通过相反的方式来使其工作。从一个空的仓库开始,将子模块添加到名为" projectfolder / common_code"的新文件夹中。之后,可以在projectfolder中添加项目代码。详细信息如下所示。
在一个空的仓库中输入:
1 | git submodule add url_to_repo projectfolder/common_code |
这将创建所需的文件夹结构:
1 2 3 | repo |-- projectfolder |-- common_code |
现在可以添加更多的子模块,并且可以将项目代码添加到projectfolder。
我还不能说为什么它能以这种方式起作用,而不是其他。
转到存储库文件夹。从.gitmodules中删除相关的子模块。选择显示隐藏文件。转到.git文件夹,从模块文件夹和配置中删除子模块。
不知道这是否有用,尽管尝试从IntelliJ 15提交文件时遇到了同样的问题。最后,我打开了SourceTree,在那里我可以简单地提交文件。问题解决了。无需发出任何奇特的git命令。如果有人遇到相同问题,只需提及它。
在您的git目录中,假设您已同步所有更改。
1 2 3 | rm -rf .git rm -rf .gitmodules |
然后做:
1 2 | git init git submodule add url_to_repo projectfolder |