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
Add Credentials(访问git用到的用户配置,不然会连接不上git仓库)
其他构建配置:
具体构建问题可以通过构建日志去查看,排查,解决,这里就不做详细说明了。