git 子模块管理代码和错误的解决
关于git submodule,网上有的是说明,这里不多说,说一说遇到的错误.
场景
我的场景是,所有的代码在ios-workspace的目录下,然后下面有一些功能模块,比如朋友圈,音视频等,现在音视频的服务较大,需要单独管理,可能以后会更换底层库,或者使用别的第三方库等,所有把他做成子模块。
目录是这样的ios-workspace/ios-rongcallkit
现在要把ios-rongcallkit做成子模块,而ios-rongcallkit本来是收ios-workspace的git管理,所有我这边的做法是先把ios-rongcallkit,整个删掉,工程的引用不删,其实这里可以把子模块换个位置不和这个名字冲突,但是我们工程好多脚本就得改,因为和目录有关
所以我的做法是,先把ios-rongcallkit目录删掉,然后执行 git submodule add XXXXXX(git 地址),
如果过看到这个报错,'ios/ios-rongcalllib' already exists in the index
删除一下缓存:git rm -r --cached .
然后执行 git submodule add ,这时候应该不会有报错了.然后执行 git add . git commit 等,提交上去
这个时候我们可以看下当前总工程的open .gitmodules文件,
可以看到,里面多了两个submodule,这里就不截图了,自己一看就知道了,再看一下工程的git配置
,cd到.git
然后cd 到modules然后可以看到对应目录下的mudule,说明模块配置成功了
你的同事克隆你的代码遇到的问题
加入你再单独的分支,然后你的同事checkout到你的分支,会看到多了两个子模块,如果用sourcetree这种git管理软件,会很直观的看见多了两个模块,这时候双击,会报错
大概是这样: already exists and is not an empty directory.
因为别人的工程的/ios-rongcallkit目录是受整个ios-workspace控制的,而你现在给他改成子模块,所以让他把这个目录删了,然后重新update submodule,因为你自己的.git里面的mudules文件夹有自己的配置,而你的同事没有,所以,让他执行两行命令,去跟新submodule,
git submodule init 和 Git submodule update
这是大概的几个重要错误,还有一些小错误,网上查查找找就OK了