在软件开发过程中,不可避免的会使用到版本控制的工具,比方说 Svn 和 Git。但在之前的过程中,对于这些强大的工具都是最基本的使用:拉取、提交 仅此而已,而恰逢公司要规范代码而请人培训 Git 工具的使用,借此来梳理一下Git的常规使用方法。
一、Git与SVN
1.1 工作流程对比
1.2 集中式代码管理
SVN 是集中式代码管理方式,其核心就是服务区,所有开发者在开始新的工作之前需要从服务器上获取最新的代码,然后合并冲突、开发、提交等操作。此时所有的版本信息都存放在服务器上,因此比较依赖服务器的稳定,但同时 SVN 的中文支持比较好,操作比较简单,因此非开发人员使用也比较方便。
1.3 分布式代码管理
Git 是分布式代码管理方式,在每个终端上都有一个版本仓库,并没有相对于 SVN 那样的服务器的概念,是比较擅长于版本控制,但是操作相对比较复杂。
二、Git 基本知识
2.1 框图
2.2 Git配置
初次安装 Git 需要配置用户名和邮箱:
git config ‐‐global user.name "用户名" // 配置用户名 git config ‐‐global user.email "邮箱地址" // 配置邮箱地址 git config ‐‐global ‐‐list // 查看全局配置 git config ‐‐global http.sslVerify false // 关闭ssl检查
|
windows 环境下回车换行与 Linux/mac 下不一致,所以需要设置一下git 的全局变量:
git config ‐‐global core.autocrlf false // 自动转换,windows下默认为true,修改为false git config ‐‐global core.safecrlf true // 拒绝提交包含混合换行符的文件
|
在使用git的时候,为了方便不输入密码就能进行代码的下载和推送,可以使用 sshkey 进行加密通信,sshkey 的生成方式如下:
ssh‐keygen ‐t rsa ‐C "xxx@163.com" // 后续会有几次确认,建议不做更改,密码也不需要设置
|
命令执行后,会在默认的~/.ssh路径下生成两个文件:id_rsa和id_rsa.pub,这两个文件一定要保存好,重装系统的时候可以重新设置回来,打开id_rsa.pub文件将内容复制出来,添加到gitlab的设置中即可
三、Git 基本操作
3.1 创建仓库
mkdir trueTest cd trueTest // 创建本地git仓库 git init touch README.md git add README.md // 添加文件,将文件从工作区转到版本暂存区 git commit ‐m "first commit" // 提交,把暂存区的所有文件提交到仓库区 git remote add origin https://gitee.com/xxx/trueTest.git // 把本地仓库与远程仓库连接起来 git push ‐u origin "master" // 把仓库区的文件提交到远程仓库里
|
3.2 拉取仓库代码
//// 克隆代码,在本地创建此仓库目录,会下载所有分支 git clone git@gitee.com:xxx/trueTest.git // 克隆单一分支 git clone ‐b xxx git@gitee.com:xxx/trueTest.git
|
3.3 查看状态
git status // 查看工作区状态,可见git分支,是否有未提交信息 git remote ‐v // 查看远端的仓库信息
|
3.4 分支操作
git checkout abc // 切换到abc分支,当有未提交的内容时,是无法切换分支的 git checkout ‐b abc // 创建abc分支,并切换到abc分支 git branch // 查看本地分支 git branch ‐a // 查看本地和远端分支 git branch abc // 在当前分支下,创建新的本地abc分支 git branch ‐d abc // 删除本地abc分支 git push origin abc // 创建远端abc分支 git push origin ‐‐delete abc // 删除远端的abc分支
|
3.5 代码操作
git pull origin master // 从远端拉取分支master的代码,并与本地仓库合并 git fetch origin master // 从远端拉取分支master的代码,不与本地仓库合并 git diff // 查看工作区内的仓库文件变更内容 git add . // 将所有文件的从工作区提交到版本暂存区 git commit ‐m "test" // 将版本暂存区的文件提交到仓库区 git push origin master // 将本地分支提交到远端的master分支 git merge abc // 将本地的abc分支合并到当前分支上 git rm <file> // 将文件从工作区和暂存区删除 git mv <file> <newfile> // 移动或重命名文件、目录
|
3.5 提交历史
git log // 查看当前分支的提交记录,包含提交人、提交时间、提交描述等 git log ‐‐oneline // 查看历史记录的简洁版本 git log ‐‐graph // 开启拓扑结构图,查看历史提交记录 git blame <file> // 查看某个文件的历史提交记录,文件内容会被展示出来
|
3.5 标签相关操作
git tag ‐a v1.0 // 给当前版本打标签,‐a表示带注解的标签 git tag ‐a v0.9 85fc7e7 // 给85fc7e7这个版本追加标签 git tag // 查看所有标签 git push origin v0.9 // 将0.9标签推送到远端 git push ‐‐tags // 将所有标签推送到远端 git tag -d v1.0 //删除本地标签 git push origin --delete v1.0 //删除远程标签
|
3.6 版本管理
git reset HEAD^ // 回退所有内容到上一个版本 git reset HEAD^ <file> // 回退某个文件的版本到上一个版本 git reset 85fc7e7 // 回退到指定版本,保留工作区,清空缓冲区 git reset ‐‐hard 85fc7e7 // 回退到指定版本,清空工作区和缓冲区,放弃目标后的所有修改 git reset ‐‐soft 85fc7e7 // 回退到制定版本,并将该版本之后的修改放入缓冲区 git checkout ‐‐ <file> // 回退某个文件到当前版本,适用于未add之前 git worktree // 用于多分支工作时,不需要来回切换分支 eg: git worktree add ../ masterDir master //表示将master分支存放在上级目录下的masterDir中 git worktree remove masterDir //删除 git worktree list //展示分支列表
|
3.7 添加 .gitignore 文件
直接在根目录下创建 .gitignore 文件,其中添加需要排除的文件即可:
/java.iml // 排除当前目录下的java.xml文件 dir/ // 排除dir这个文件夹及其所有内容 .gitignore // 排除自身 *.o // 排除所有 .o 后缀的文件
|
如果之前忘记定义 .gitignore 文件,而且已经执行了 git add. 命令,想要定义 .gitignore 文件,操作如下:
# 清除记录的所有文件管理信息,注意行末的点表示当前目录,一定要写 git rm -r --cached . # 添加该仓库的所有文件,注意行末的点表示当前目录,一定要写 git add . # 提交注释 git commit -m "....." # 推送到仓库 git push -u origin master
|
用 -r 参数删除目录, git rm –cached hello.txt 删除的是本地仓库中的文件,且本地工作区的文件会保留且不再与远程仓库发生跟踪关系,如果本地仓库中的文件也要删除则用 git rm hello.txt
3.8 打包干净代码
类似 svn export,可以用来从代码库中导出一份干净的代码(没有.svn),git提供同样的功能,如下基本方法:
# 打包不同的分支 git archive --format=zip --output="./output.zip" 分支
#打包不同的commit git archive --format=tar.gz --output= "./output.tar.gz" commit id
#打包指定分支的目录 git archive --format=tar.gz --output "./output.tar.gz" master mydir mydir2
|
注意在操作时,建议在对应分支的根目录下操作不容出错,–format不指定时根据名字来推断。
四、参考
[ 1 ] SVN和Git 介绍,区别,优缺点以及适用范围
[ 2 ] git 中添加 .gitignore
[ 3 ] git导出代码的方法~archive