git创建一个公共子模块用于不同的项目共享这一个子模块
引言
- 创建公共子模块
- 创建仓库(托管子模块的代码)
- 创建子模块
- 在主项目中添加子模块
- 更新子模块和使用子模块
- 自动化更新子模块
项目开发中,有时几个不同的工程都用到同一个头文件,这时这个头文件就可以放在一个子模块中,每次子模块的代码更新之后,其它的工程就去更新子模块,这几个工程共享这个子模块。
创建公共子模块
创建仓库(托管子模块的代码)
- 在代码托管平台上创建一个远程仓库,设置仓库的相关的属性(描述,访问属性,可访问成员等)。
- 创建好远程仓库后,可以看到远程仓库的url。git@192.168.3.128:zhangsan/File.git。
创建子模块
- 找到自己打算作为子模块中代码的文件,在主项目所在的目录下新建一个文件夹,将这些要共享的代码拷贝到新建的目录下。(主项目就是自己希望使用子模块的项目)
mkdir share_module
cd share_module
cp 源文件的路径 ./ #将要共享的文件拷贝到新建的子模块文件夹下
- 在新建的目录share_module下,初始化git.
git init
- 设置仓库的配置。
git config --global user.name "zhangsan"
git config --global user.email"zhangsan@163.com"
- 添加代码到仓库中。
git add . //添加自己的想要添加的文件就好,点代表添加当前目录下所有的文件
git commit -m "初次添加代码" //给这次添加添加描述
- 关联远程仓库与本地仓库。
git remote add origin git@192.168.3.128:zhangsan/File.git
- 推送代码到远程仓库。
git push origin 你的当前分支名
这里还没有在本地新建分支,所以使用远程分支同名的分支master,也就是git push origin master.
也可以自己使用指令查看当前所有的分支。
git branch -a #查看所有的分支,包含远程分支和本地分支,此时本地没有新建分支,只能看到远程分支及远程分支映射的本地分支
- 此时托管平台上创建的仓库中已经有了子模块中要共享的代码。可以去托管平台查看。
在主项目中添加子模块
这里默认已经将主项目放置在git托管平台上了,如果主项目没有放在托管平台上则需要自己去添加主项目到托管平台。步骤和前面创建子模块的代码到远程仓库一样,也可以查看git初次怎么上传代码到远程仓库中(命令行)这篇博文。
- 进入主项目所在的本地仓库下
即自己主项目要添加子模块的开发分支下。 - 添加子模块到主项目
git submodule add git@192.168.3.128:zhangsan/File.git ./share_module/
3.初始化并更新子模块
git submodule update --init --recursive
更新子模块和使用子模块
- 进入子模块所在的目录
cd share_module
- 修改子模块中代码
- 提交修改的子模块中代码
git add shared-file.h
git commit -m "Update shared file"
git push origin master#这里的master是自己当前所在的本地分支,可使用git branch查看,带*的便是
- 在主项目中更新子模块
cd .. # 回到主项目目录
git add share_module
git commit -m "Update submodule reference"
git push origin develop#这里的develop是自己当前所在的本地分支,可使用git branch查看,带*的便是
- 在其它项目中更新子模块的内容
cd 其它项目的目录
git pull # 更新其它主项目代码
git submodule update --init --recursive # 更新子模块内容
自动化更新子模块
要想只使用git pull和git submodule update来更新代码,需要配置.gitmodules文件。在 .gitmodules 文件中指定子模块的分支。
- 编辑.gitmodules文件。
[submodule "share_module "]
path = share_module
url = git@192.168.3.128:zhangsan/File.git
branch = develop #子模块所在的分支
- 使用下面的指令来应用更改
git submodule sync
以上创建一个公共的子模块,并在多个项目中共享和更新它。每次更新子模块后,其他项目的团队成员只需运行 git pull 和 git submodule update 即可获取最新的子模块内容。