Git 系列文章

相关文章

Git的子模块

经常使用基础指令

知道了git的大概工做的大概流程咱们来实践一下git的基础操做html

  • git submodule add 远程仓库地址 添加子模块
  • git submodule init 初始化本地配置文件
  • git submodule updata 拉取子模块数据
  • git clone --recursive 远程仓库地址 克隆包含子模块的仓库(不用初始化)
  • git rm 子模块 删除子模块
  • git submodule foreach 操做命令 遍历子模块执行一样的命令

来自官网有种状况咱们常常会遇到:某个工做中的项目须要包含并使用另外一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 如今问题来了:你想要把它们当作两个独立的项目,同时又想在一个项目中使用另外一个。这个时候咱们就须要用到git的子模块功能了。git

说白了咱们要作的就是在一个git仓库中在克隆一个git仓库作为它的子仓库github

使用子模块

1. 添加子模块

好比咱们已经有一个test仓库了,咱们在该仓库中加入一个project仓库来做为它的子模块,咱们来test仓库中执行git submodule add 远程仓库地址web

git submodule add git@github.com:webxiaoma/project.git

执行完后咱们会看到自咱们的test仓库中有了一个project仓库,并且在根目录下多了一个.gitmodules 文件,这个文件中记录着咱们子仓库的信息less

[submodule "project"]
    path = project
    url = git@github.com:webxiaoma/project.git

而且咱们如今能够进入咱们的版本库.git 目录来看一下,该目录中会多出一个modules 文件夹,该文件夹中保存了咱们project 仓库的一些配置信息和版本,他就是咱们子仓库的版本库,在咱们的config配置文件中也多出了一个submodule模块来记录咱们子仓库的远程地址url

// 上省略
[submodule "project"]
    url = git@github.com:webxiaoma/project.git
    active = true

另外对子模块project的git操做和日常命令同样,咱们只要在子模块中去执行就能够。code

2. 克隆含有子模块的仓库

这里为了操做克隆含有子模块的仓库,咱们将咱们上面test仓库提交并推送到远程,以后咱们删除本地test仓库,而后咱们来克隆它,这里将带有子模块的仓库克隆下来并初始化有两种方法:htm

第一种方法开发

git clone git@github.com:webxiaoma/test.git

克隆下来后咱们进入子模块project目录中,会发现该目录是空的,咱们须要初始化子模块。rem

// 初始化本地配置文件
git submodule init

// 则从该项目中抓取全部数据并检出父项目中列出的合适的提交
git submodule updata

第二种方法

这种方法克隆下拉的仓库它的子仓库就已经初始化好了

git clone --recursive git@github.com:webxiaoma/test.git

3. 推送子模块

推送子模块咱们能够直接在子模块中执行git push,若是提示你执行 git push origin HEAD:<远程分支名>, 你查看一下你是否处于子模块的master 分支,若是不是切换到master分支去推送,推送完成后咱们再去推送咱们的父模块。

4. 更新子模块

咱们更新子模块有两种方法。第一种方法咱们在子模块目录直接使用git pull;

第二种方法是使用git submodule update --remote 子仓库名

git submodule update --remote project

5. 删除子模块

删除子模块咱们可使用

git rm project

这样删除的子模块其实只是把咱们子模块的文件夹删除了,并无将子模块的信息删完全,咱们还要进入.git/module 目录中将project目录删除(这个目录对应的是子模块的的目录,若是你的模块叫lesson,那么就在.git/module 目录中删除对应的lesson目录)。

6. 批量操做子模块

若是主仓库中含有不少的子模块,咱们在推送主仓库时须要先推送每个子模块,这样操做很麻烦,咱们可使用git submodule foreach 命令foreach能够遍历全部子模块并执行咱们要执行的命令。例如咱们推送全部子模块

git submodule foreach 'git pull'
相关文章
相关标签/搜索