添加通用代码作为git子模块的问题:“已经存在于索引中”
我是新来的混帐,并会感谢帮助添加子模块。 我收到了两个共享一些通用代码的项目。 共享代码只是复制到两个项目中。 我为通用代码创build了一个单独的git仓库,并将其从项目中删除,并将其添加为git子模块。
我用git submodule add的path选项来指定文件夹:
git submodule add url_to_repo projectfolder 但后来得到了错误:
 'projectfolder' already exists in the index" 
这是我的存储库所需的结构:
 repo |-- projectfolder |-- folder with common code 
可以将git子模块直接添加到回购站中,或者直接添加到新文件夹中,但不能添加到项目文件夹中。 问题是,它真的需要在项目文件夹..我能做些什么,我有什么误解了git子模块的path选项添加?
恐怕没有足够的信息来确定发生了什么事情,因为你没有回答我的后续问题,但这可能对你有帮助。
 该错误意味着项目文件projectfolder已经上演(“已经存在于索引中”)。 要了解这里发生了什么,请尝试列出该文件夹下索引中的所有内容: 
 git ls-files --stage projectfolder 
 该输出的第一列将告诉你在projectfolder的索引中有什么types的对象。  (这些看起来像Unix文件模式,但在git中有特殊的含义。) 
我怀疑你会看到像这样的东西:
 160000 d00cf29f23627fc54eb992dde6a79112677cd86c 0 projectfolder 
  (即以160000开始的行),在这种情况下, projectfolder的存储库已经添加为“gitlink”。 如果它没有出现在git submodule的输出中,并且你想重新添加它作为子模块,你可以这样做: 
 git rm --cached projectfolder 
把它卸下来,然后:
 git submodule add url_to_repo projectfolder 
…将存储库作为子模块添加
 但是,也可能会看到许多列出的斑点(文件模式为100644和100755 ),这会向我build议,在将新的存储库复制projectfolder之前,没有正确projectfolder文件projectfolder的文件。 如果是这种情况,您可以执行以下操作来取消所有这些文件: 
 git rm -r --cached projectfolder 
…然后添加子模块:
 git submodule add url_to_repo projectfolder 
我有同样的问题,并在几个小时后find答案。
 我得到的错误是有点不同: <path> already exists and is not a valid git repo (在这里增加了SEO值) 
 解决scheme是不创build将容纳子模块的目录。 该目录将作为git submodule add命令的一部分被创build。 
另外,这个参数预计是相对于父回购的根,而不是你的工作目录,所以要小心。
上面的例子的解决scheme:
- 你父母的回购已经克隆好了。
-  确保common_code目录不存在。
-  cd Repo
-   git submodule add git://url_to_repo projectfolder/common_code/( 注意所需的尾部斜线。 )
- 理智恢复。
我希望这有助于某人,因为在其他地方找不到有关这方面的信息。
手动删除子模块涉及到一些步骤,这对我有效。
假设你在项目根目录下,并且示例git模块名称是“c3-pro-ios-framework”
删除与子模块关联的文件
 rm -rf .git/modules/c3-pro-ios-framework/ 
删除对config中子模块的引用
 vim .git/config 
  
 
删除.gitmodules
 rm -rf .gitmodules 
从caching中删除它没有“混帐”
 git rm --cached c3-pro-ios-framework 
添加子模块
 git submodule add https://github.com/chb/c3-pro-ios-framework.git 
 如果在git控制下有一个名为x的文件夹,你想要添加一个同名的子模块,你应该先删除文件夹x并提交它 。 
@ ujjwal-singh更新:
 提交是不需要的,分期足够.. git add / gir rm -r 
我是这样做的。 从一个空的回购开始,将子模块添加到名为“projectfolder / common_code”的新文件夹中。 之后,可以在项目文件夹中添加项目代码。 细节如下所示。
在一个空的回购types中:
 git submodule add url_to_repo projectfolder/common_code 
这将创build所需的文件夹结构:
 repo |-- projectfolder |-- common_code 
现在可以添加更多的子模块,项目代码可以添加到项目文件夹中。
我不能说为什么它这样做,而不是其他。
只是为了澄清在人类的语言错误是想告诉你:
您不能在已经在主资源库中跟踪的文件夹中创build资源库。
 例如:你有一个名为AwesomeTheme的主题文件夹,它是一个专用的存储库,你可以直接把它转储到你的主存储库,比如git submodule add sites/themes ,你会得到这个"AwesomeTheme" index already exists 。 
 你只需要确定在主版本库的版本跟踪中还没有sites/themes/AwesomeTheme ,这样子模块就可以在那里创build了。 
 所以要解决,如果你有一个空的sites/theme/AwesomeTheme目录,然后将其删除,在您的主要存储库。 如果您已经在主仓库中提交了sites/theme/AwesomeTheme目录,则需要使用如下命令清除其所有历史logging: 
 git filter-branch --index-filter \ 'git rm -r --cached --ignore-unmatch sites/theme/AwesomeTheme' HEAD 
 现在你可以运行git submodule add git@AwesomeTheme.repowhateverurlthing sites/themes/AwesomeTheme 
 由于主存储库从未在sites/themes/AwesomeTheme看到过任何东西(又名索引),现在可以创build它了。 
不知道这是否有用,尽pipe当我尝试从IntelliJ 15中提交文件时遇到了同样的问题。最后,我打开了SourceTree,在那里我可以简单地提交该文件。 问题解决了。 不需要发出任何奇特的git命令。 只要提到它,以防万一任何人有同样的问题。
在你的git目录中,假设你已经同步所有的改变。
 rm -rf .git rm -rf .gitmodules 
然后做:
 git init git submodule add url_to_repo projectfolder