您的位置:首页 > 其它

git 子模块以及 在 Jenkins中如何使用

2017-08-15 14:30 148 查看
git version 2.11.0 (Apple Git-81)

Jenkins ver. 2.46.3

工作中会遇到这种情况,多个项目引用了同一套代码 A,这套代码A修改后还需要在多个项目中同步,如果项目是 git 管理,那就需要在每个项目中嵌入一个子模块,这个子模块就是 A

git 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。

1:添加子模块
如果我们要嵌入一个子模块,就必须调用 submodule add 命令,并制定该模块的 仓库路径和模块所在的目录名

> git submodule add git@github.com:langzuxiaozi/ExtractSms.git sub


这样一来,模块版本库就会被完整地克隆到制定的目录中(并且它也会创建属于它自己的.git目录),主版本库中的.gitmodules文件也将被同步创建或更新

然后还需要将新的子模块注册到.git/config文件中.

>git submodule init
目前子模块指向的是默认分支的 HEAD, 如果需要选择子模块的版本, 那就需要用 checkout 命令来选择一下相应的版本

>cd sub
>git checkout v1.0
>cd ..
然后将.gitmodules 文件和子目录添加到提交中

>git add .gitmodules
>git add sub
>git commit -m "Submodule added"
>git push

2:克隆带有子模块的项目

要克隆一个带有子模块的项目需要在执行 git clone 命令之后 需要初始化子模块和更新子模块,要不子模块的目录内容是空的

>git submodule init
>git submodule update
现在子模块目录就有内容了.当然也可以执行递归命令

>git clone --recursive git@github.com:langzuxiaozi/ExtractSms.git

3:子模块仓库有更新,要用最新的子模块代码

在许多开发项目中,我们通常都希望主项目所集成的始终是子模块的当前最新版本.

git 的子模块不支持这种想法,子模块引用的只是模块版本库中的某一次提交,模块版本库中随后的新提交并不会自动记录到主版本库中.所以需要我们显示的修改

更新子模块

>cd sub
>git fetch
>git checkout v1.0
>cd ..
最后将新提交更新到模块目录中.
>git add sub
>git commit -m "New version of the submodule"
>git push


4:修改子模块文件内容后,提交更新

如果在工程中修改了子模块的文件,那就进入到主版本库中的子模块目录提交并推送

>cd sub
>git add jni_common.h
>git commit -m "Changed submodule"
>git push
>cd ..
这个时候去子模块的仓库看,就能看的这次的修改了,但是还没完,主板本的仓库还没更新呢,

先看一下当前主版本中子模块被引用的散列值
>git submodule status
+447ff22adb9ed9a72e4be7cdfa7ebe4f5ba2af0a sub (heads/master)
这个散列值是和子模块中仓库中最新提交的散列值是一致的.下面更新主版本的仓库

>git add sub
>git commit -m "New version of submodule"
>git push


5:修改子模块的 url

打开目录下的.gitmodules文件,修改对应模块的 url,然后执行命令

>git submodule sync
>git commit -am "Update submodule url."
>git push

6:删除子模块

首先逆初始化子模块目录,执行后目录内容为空

>git submodule deinit sub
然后删除.gitmodules中的sub模块信息 然后提交
>git rm --cached sub
>git git commit -am "Remove a submodule."
>git push

7:Jenkins配置 git 子模块

首先 git 的证书 是在 Jinkens 上配的才可以
Additional Behaviours -> Add -> Advanced sub-modules behaviours 选中

Recursively update submodules 和 Use credentials from default remote of parent repository

完成.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git submodule Jenkins
相关文章推荐