Git尝试将子模块文件提交到父项目中

时间:2013-06-26 12:05:09

标签: git git-submodules

所以我有一个包含一些子模块的项目。所有这些都很有效,直到今天我尝试了Visual studio git工具。我试着在那里提交一个子模块。我在网上看到,vs git工具不能正确支持子模块。

所以看起来我有点乱,我不确定如何解决它。

当我执行git commit --dry-run时,我得到了这个:http://db.tt/CRKbC5Gt 确实,我在Memflex子模块中更改了这些测试,但不应将它们检入主项目。

子模块本身仍然有效,我已经检查过并检查过github,一切似乎都很好。

所以我的问题在于,包含项目现在似乎对子模块感到困惑。即使它有.gitmodules

中列出的子模块

如果我浏览到子模块,它仍然显示它是一个子模块,因为它具有子模块的正确分支,如下所示:http://db.tt/sTvQQ9qY

如果我使用togotise git,它会尝试检查我从visual studio签入的子模块的每个文件,如下所示:http://db.tt/rtX9rz6r

总而言之:大多数事情似乎仍然有效,所有子模块似乎都按预期工作。 唯一的问题是包含子模块的主项目现在尝试检入来自所述子模块的所有文件。

我没有运气就尝试使用git submodule init,据我所知它没有做任何事情。


更新:我看到主要项目所在的Assembla发生了什么:http://db.tt/uscTJ9MB

我想我在这里做点什么! 只有我从visual签入的项目才有这个目录以及子模块

3 个答案:

答案 0 :(得分:2)

启动git 1.9.x / git2.0(2014年第2季度)和commit cbaeafc,尾随斜杠或没有尾随斜杠不再有任何区别:

  

允许“git cmd path/”,当“path”是子模块绑定到顶级工作树的位置时,匹配“path”,尽管额外且不必要尾随斜线。

因此,您将无法将子模块内容错误地添加到父级仓库中(强制您使用git add取消该错误的git rm --cached -rf)。

答案 1 :(得分:1)

当您使用与git add <path-to-submodule>/

不同的git add <path-to-submodule-without-slash>时会发生这种情况

在第二种情况下,git开始仅跟踪目录,了解它实际上是对子模块的引用。在第一种情况下,它认为您想要跟踪该文件夹的所有内容,作为回购的一部分。

答案 2 :(得分:0)

我最终从我的Lib dir运行git rm --cached -rf Memflex /,如下所示:http://db.tt/E0SejkDw

这删除了目录,但保留了子模块,因此一切都在神奇的forrest中再次开心。