我想添加一些git子模块。 我已经收到了两个共享一些公共代码的项目。共享代码只是复制到两个项目中。我为公共代码创建了一个单独的git repo,并将其从项目中删除,计划将其作为git子模块添加。

我使用了git子模块add的路径选项来指定文件夹:

git submodule add url_to_repo projectfolder

但随后出现了错误:

'projectfolder' already exists in the index"

这是我的存储库所需的结构:

repo
|-- projectfolder
    |-- folder with common code

可以直接在repo中添加git子模块,或者添加到那里的新文件夹中,但不能添加到项目文件夹中。问题是,它真的需要在项目文件夹.. 对此我能做什么,我对git子模块add的路径选项有什么误解?


当前回答

不知道这是否有用,尽管我在试图从IntelliJ 15中提交文件时遇到了同样的问题。最后,我打开SourceTree,在那里我可以简单地提交文件。问题解决了。不需要发出任何花哨的git命令。只是顺便提一下,以防有人有同样的问题。

其他回答

我也有同样的问题,经过几个小时的寻找,我找到了答案。

我得到的错误是有点不同:<path>已经存在,不是一个有效的git回购(并添加到这里的SEO值)

解决方案是不创建存放子模块的目录。该目录将作为git子模块add命令的一部分创建。

此外,参数应该相对于父-repo根目录,而不是您的工作目录,所以要注意这一点。

上述例子的解决方案:

这是可以让你的父回购已经克隆。 确保common_code目录不存在。 cd回购 git子模块添加git://url_to_repo projectfolder/common_code/(注意后面需要斜杠) 理智恢复。

我希望这能帮助到一些人,因为在其他地方找到的信息很少。

用人类语言解释一下这个错误的意思:

不能在此文件夹中创建已在主存储库中跟踪的存储库。

例如:你有一个名为AwesomeTheme的主题文件夹,这是一个专用的存储库,你试着把它直接转储到你的主存储库,比如git submodule add sites/themes,你会得到这个“AwesomeTheme”索引已经存在。

您只需要确保在主存储库的版本跟踪中没有sites/themes/AwesomeTheme,这样就可以在那里创建子模块。

所以要修复,在你的主存储库中,如果你有一个空的sites/theme/AwesomeTheme目录,然后删除它。如果你已经在你的主存储库中提交了sites/theme/AwesomeTheme目录,你需要使用如下命令清除它的所有历史记录:

git filter-branch --index-filter \
              'git rm -r --cached --ignore-unmatch sites/theme/AwesomeTheme'     HEAD

现在你可以运行git子模块添加git@AwesomeTheme.repowhateverurlthing sites/themes/AwesomeTheme

因为主存储库以前从未在sites/themes/AwesomeTheme中看到过任何东西(也就是索引),所以现在可以创建它了。

转到存储库文件夹。删除.gitmodules中的相关子模块。选择显示隐藏文件。转到。git文件夹,从模块文件夹和配置中删除子模块。

我用另一种方法让它工作。从一个空的repo开始,将子模块添加到名为“projectfolder/common_code”的新文件夹中。之后,就可以在projectfolder中添加项目代码了。详细信息如下所示。

在空的repo类型中:

git submodule add url_to_repo projectfolder/common_code

这将创建所需的文件夹结构:

repo
|-- projectfolder
    |-- common_code

现在可以添加更多的子模块,项目代码可以添加到projectfolder中。

我还不能说为什么是这样,而不是那样。

如果git控制下存在一个名为x的文件夹,你想添加一个同名的子模块,你应该先删除x文件夹并提交。

由@ujjwal-singh更新:

提交是不需要的,分期就足够了。Git add / Git rm -r