git jenkins 子目录_git 操作以及submodule模式详解,附加jenkins对submodule方式的集成...

git常用命令

注意:请确保已经安装里git客户端

git使用帮助

git --help    //git使用帮助,可以查看git使用指令

一般配置

git --version      //查看git的版本信息

git config --global user.name 'username'       //配置当前登录的用户

git config --global user.email 'email'   //配置当前登录用户的邮箱

git初始化

git init

查看目录

ls  或者 ls -al

查看文件

cat filename

增加到暂存区、取消增加

git add filename    //添加单个文件

git add . 或者git add -a     //添加所有未被忽略的文件

git reset HEAD index.html      //取消

增加到版本库中

git commit -m "提交备注信息"

查看历史提交

git log

比较差异

git diff   //比较的是暂存区和工作区的差异

git diff --cached     //比较的是暂存区和历史区的差异

git diff master    //比较的是历史区和工作区的差异(修改)

删除

rm fileName     //删除文件

git rm index.html --cached    //删除暂存区

回滚

git reset --hard HEAD/commit_id

分支管理

git branch dev    //创建分支

git check dev     //切换分支

git checkout -b dev    //创建分支并切换分支

git branch -d dev    //删除分支

git commit -a -m 'dev1' //分支上提交

git merge dev  //合并分支

git stash    //保留改动

git stash drop    //废弃保留的内容

git stash pop     //使用保留的内容

git rebase    //合并分支

添加到远程仓库

git push -u origin master     //获取最新代码

git remote add origin 仓库的地址    //连接远程仓库

git remote -v    //查看远程仓库

git remote rm origin    //删除远程仓库

更新代码,合并冲突

git pull     //更新代码

解决冲突(具体遇到时再贴图完善)

根据更新代码时的冲突日志,找到冲突文件,合并代码,重新提交

以上为基础的使用方式,以后有时间再完善。

git submodule 管理项目子模块

使用场景:

当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能。

什么是Submodule?

git Submodule是一个很好的多项目使用共同类库的工具,他允许类库项目做为repository,子项目做为一个单独的git项目存在父项目中,子项目可以有自己的独立的commit,push,pull。而父项目以Submodule的形式包含子项目,父项目可以指定子项目header,父项目中会的提交信息包含Submodule的信息,再clone父项目的时候可以把Submodule初始化。

常用指令:

git clone git地址 --recursive 递归的方式克隆整个项目

git submodule add 添加子模块

git submodule init 初始化子模块

git submodule update 更新子模块

git submodule foreach git pull 拉取所有子模块

使用:

1. 创建带子模块的版本库

例如我们要创建如下结构的项目

project

|--moduleA

|--readme.txt

创建project版本库,并提交readme.txt文件

git init --bare project.git

git clone project.git project1

cd project1

echo"This is a project."> readme.txt

git add .

git commit -m "add readme.txt"

git push origin master

cd..

创建moduleA版本库,并提交a.txt文件

git init --bare moduleA.git

git clone moduleA.git moduleA1

cd moduleA1

echo"This is a submodule."> a.txt

git add .

git commit -m"add a.txt"

git push origin master

cd..

在project项目中引入子模块moduleA,并提交子模块信息

cd project1

git submodule add ../moduleA.git moduleA

git status

git diff

git add .

gitcommit-m"add submodule"

git push originmastercd ..

使用git status可以看到多了两个需要提交的文件,其中.gitmodules指定submodule的主要信息,包括子模块的路径和地址信息,moduleA指定了子模块的commit id,使用git diff可以看到这两项的内容。这里需要指出父项目的git并不会记录submodule的文件变动,它是按照commit id指定submodule的git header,所以.gitmodules和moduleA这两项是需要提交到父项目的远程仓库的。

Onbranch masterYour branchisup-to-datewith'origin/master'.Changestobe committed:  (use"git reset HEAD ..."tounstage)newfile:  .gitmodulesnewfile:  moduleA

2. 克隆带子模块的版本库

方法一,先clone父项目,再初始化submodule,最后更新submodule,初始化只需要做一次,之后每次只需要直接update就可以了,需要注意submodule默认是不在任何分支上的,它指向父项目存储的submodule commit id。

git clone project.git project2

cd project2

git submodule init

git submodule update

cd..

方法二,采用递归参数--recursive,需要注意同样submodule默认是不在任何分支上的,它指向父项目存储的submodule commit id。

git clone project.git project3 --recursive

3. 修改子模块

修改子模块之后只对子模块的版本库产生影响,对父项目的版本库不会产生任何影响,如果父项目需要用到最新的子模块代码,我们需要更新父项目中submodule commit id,默认的我们使用git status就可以看到父项目中submodule commit id已经改变了,我们只需要再次提交就可以了。

先提交子模块

cd project1/moduleA

git add .git commit -m"add b.txt"

git push origin master

再提交project

cd..

git status

git diff

git add .

git commit -m"update submodule add b.txt"

git push origin mastercd..

4. 更新子模块

更新子模块的时候要注意子模块的分支默认不是master。

方法一,先pull父项目,然后执行git submodule update,注意moduleA的分支始终不是master。

cd project2

git pull

git submodule update

cd..

方法二,先进入子模块,然后切换到需要的分支,这里是master分支,然后对子模块pull,这种方法会改变子模块的分支。

cd project3/moduleA

git checkout master

cd..

git submodule foreach git pull

cd..

5. 删除子模块

网上有好多用的是下面这种方法

git rm--cached moduleA

rm -rf moduleA

rm .gitmodules

vim .git/config

删除submodule相关的内容,例如下面的内容

[submodule"moduleA"]      url =/Users/nick/dev/nick-doc/testGitSubmodule/moduleA.git

然后提交到远程服务器

git add .

gitcommit-m"remove submodule"

但是我自己本地实验的时候,发现用下面的方式也可以,服务器记录的是.gitmodules和moduleA,本地只要用git的删除命令删除moduleA,再用git status查看状态就会发现.gitmodules和moduleA这两项都已经改变了,至于.git/config,仍会记录submodule信息,但是本地使用也没发现有什么影响,如果重新从服务器克隆则.git/config中不会有submodule信息。

git rm moduleA

git status

gitcommit-m"remove submodule"

git push origin master

Jenkins应用git submodule

Jenkins用来做项目的持续集成,如果使用了Git Submodule,每次Jenkins更新版本库的时候还需要更新submodule的内容。

1、确保你已经下载并能使用Jenkins,如果没有,自己去下载Jenkins

2、具体配置

新建自由风格项目,设置项目更新submodule

43f8427b4898?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Add Credentials(访问git用到的用户配置,不然会连接不上git仓库)

43f8427b4898?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

43f8427b4898?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

其他构建配置:

具体构建问题可以通过构建日志去查看,排查,解决,这里就不做详细说明了。

43f8427b4898?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

可以在jenkins的工作空间中查看git submodule 代码是否拉取成功

43f8427b4898?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

最后构建

43f8427b4898?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

总的步骤已经说明完了。good luck~~~~~~~~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值