我遇到了类似的问题,但是使用GUI工具使自己陷入困境。
我有一个子项目,里面有几个文件,到目前为止,我只是复制而不是检查自己的git repo。我在子文件夹中创建了一个存储库,能够进行提交,推送等工作。但是在父仓库中,子文件夹并未被视为子模块,并且其文件仍被父仓库跟踪-不好。
为了摆脱混乱,我不得不告诉Git停止跟踪子文件夹(不删除文件):
proj> git rm -r --cached ./ui/jslib
然后,我不得不告诉它那里有一个子模块(如果git当前正在跟踪任何内容,则无法执行该操作):
proj> git submodule add ./ui/jslib
更新资料
解决此问题的理想方法涉及更多步骤。理想情况下,将现有存储库移到其自己的目录中,不带任何父git模块,进行提交和推送,然后将其添加为子模块,例如:
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
这会将git repo克隆为子模块-这涉及标准的克隆步骤,还涉及git代表您执行的其他一些晦涩的配置步骤,以使该子模块正常工作。最重要的区别是,它在其中放置了一个简单的.git文件,而不是.git目录,该目录包含指向实际git dir所在位置的路径引用-通常位于父项目根目录.git / modules / jslib中。
如果您不采用这种方式做事,他们会为您工作的很好,但是一旦您提交并推动了父项,而另一个开发人员去拉扯该父项,您就使他们的生活变得更加艰难。只要您在包含其自己的.git目录的dir子文件夹中具有完整的.git目录,它们将很难复制您计算机上的结构。
因此,移动,推送,git add子模块是最干净的选择。