Bootstrap

gitlab部署及整合Jenkins持续构建(一)版本控制工具Git基本命令、管理远程仓库GitHub

什么是代码托管中心

定义:代码托管中心是网络服务器的远程代码仓库,也称为远程仓库

  • GitHub(外网访问)
  • GitLab(局域网访问)
  • Gitee(国内远程仓库) 码云

什么是版本控制

  • 记录和跟踪项目中各文件内容的改动变化
  • 保存项目的版本历史,以及改动原因,从而让用户能够查看各个历史版本
  • 版本控制系统是帮助开发人员进行协作开发的利器

版本控制工具

  • 在公司的日常项目开发中,最常见的工作模式就是团队协作,一个 系统/网站 的开发往往解构成一个个独立的 模块/功能 ,由多个 人/团队 分别完成
  • 随着项目开发积累,越来越多的项目需要归档整理
    这时候就需要版本控制

集中式版本控制工具SVN

SVN:版本库是集中放在中央服务器的,而开发的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后更改,完成后,需要把自己做的更改推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,网速慢的话,传输非常慢。

缺点:

  • 服务器单点故障时无法更新版本
  • 容错性差(中央服务器磁盘损坏时全部数据将丢失,只剩各个电脑上的单独快照也就是更改记录)

分布式版本控制工具Git

Git:没有中央服务器,每个人的电脑就是一个完整的版本库,这样开发的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送到代码托管中心gitee(国内)、github、gitlab,就可以互相看到对方的修改了

优点:

  • 断网情况下,也可以进行版本控制(本地仓库)
  • 每个客户端保存的都是完整的项目(包含历史记录,更加安全)

window安装Git

git官网地址:https://git-scm.com/
在这里插入图片描述

网上有很多git安装教程,自行安装即可,使用git -version验证是否安装成功
在这里插入图片描述

git基本命令

在这里插入图片描述

git 本地操作

git --help:调出Git的帮助文档

  • git + 命令 --help:查看某个具体命令的帮助文档
  • git --version:查看git的版本

git init生成空的本地仓库
git add将文件添加到暂存区

初次commit之前,需要配置用户邮箱及用户名,使用以下命令:
git config --global user.email "[email protected]"
git config --global user.name "Your Name"

git commit:将暂存区里的文件提交到本地仓库

git 远程操作

git remote:用于管理远程仓库
git push -u [origin] master:往名字为origin(自定义)的仓库的master分支上提交变更
git fetch:拉取远程仓库的变更到本地仓库
git merge origin/master:将远程的变更,合并到本地仓库的master分支
git pull:不建议使用 等同于fetch之后merge

上传一个项目到github(管理远程仓库)

新建一个repository:
在这里插入图片描述
在这里插入图片描述

github给出了流程:
在这里插入图片描述

git操作:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

第一次执行git push -u origin main会弹出登录验证:
在这里插入图片描述
在这里插入图片描述

上传成功:
在这里插入图片描述

在这里插入图片描述

git文件操作命令

git status:用于查看git的状态
git rm:用于git文件的删除操作

  • 如果只是git rm --cache仅删除暂存区里的文件
  • 如果不加--cache会删除工作区里的文件并提交到暂存区

git checkout:直接加文件名 从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖加了【分支名】+文件名则表示从分支名为所写的分支名中拉取文件并覆盖工作区里的文件

在这里插入图片描述

新建文件—>Untracked使用add命令将新建的文件加入到暂存区—>Staged使用commit命令将暂存区的文件提交到本地仓库—>Unmodified如果对Unmodified状态的文件进行修改—>modified如果对Unmodified状态的文件进行remove操作—>Untracked

例:
在这里插入图片描述

git分支命令

git branch 分支名:创建新分支,创建分支的时候,分支名不用使用特殊符号
git branch:不加任何参数,列出所有的分支,分支前面有*号,代表该分支为当前所在分支
git branch -d 分支名:删除分支,不能删除当前所在的分支
git branch -m 旧分支名 新分支名
git checkout 分支名:切换分支,如果在分支上面对文件进行修改之后,没有commit就切换到另外一个分支b, 这个时候会报错,因为没有commit的文件在切换分支之后会不覆盖,所以Git 报错提示。
git checkout -f 分支名:强制切换到分支,如果当前有为提交的变更,会直接丢弃 -f 参数一定一定要非常非常小心使用,一般情况下不建议使用,除非真的要强制去执行

git的log命令

log命令用于查看git的提交历史
git log命令显示的信息的具体含义:
在这里插入图片描述

# 通过SHA-1算出的校验和(commit id)
commit 35e33035b864b56864e12131951211d719cd2a84 
Author: zyTen <zhangyl7130@163.com> # --作者跟邮箱概要信息
Date:   Mon Mar 27 18:49:08 2023 +0800 # --提交时间

[分支名] --commit -m:提交的时候,使用-m选项说写一段概要说明,日常在使用commit的时候,-m选项所写得内容一定不能随便写,如“commit”
正确示例: “修改了登陆的bug”–》“新增用户管理中心”

git log -数字:表示查看最近几次的提交
git log -p -2:显示最近两次提交的不同点
git log --author:查看具体某个作者的提交
git log --online:输出简要的信息
git log --graph:以一个简单的线串联起整个提交历史
git log:输出信息的定制

git的文件对比命令

diff是difference的缩写,用于比较差异,用于解决冲突、制作补丁
git diff 不加任何参数 用于比较当前工作区跟暂存区的差异
git diff --cached 或者--staged:比较暂存区和当前分支的差异
git diff HEAD:比较暂存区和当前分支的差异
git diff 分支名:查看当前分支跟指定的分支的差异
git diff 分支名1 分支名2:查看两个指定分支(已提交的)的差异,分支2 跟分支1的差别
git diff 文件名:查看指定文件的差异
git diff commitid1 commitid2:用于列出两个历史提交的差异
git diff --stat:用于罗列有变更的文件

例:
1、在main分支下,添加file1和file2到工作区并提交,其中内容分别如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、修改file2文件并提交:
在这里插入图片描述
在这里插入图片描述

3、使用git log查看commitid,使用git diff查看文件差异:
在这里插入图片描述
在这里插入图片描述

diff --git a/file2 b/file2 # 代表的是file2的两个版本
index f479cf9..3b69d20 100644
--- a/file2	# -代表变更前的文件
+++ b/file2	# +代表当前文件
@@ -1 +1,2 @@	# 变更文件前的第一行 变更之后的第一行往下两行 这块文件区域有差异
-this is bbb
\ No newline at end of file	# 变更前的文件内容
+this is bbb
+by zyten
\ No newline at end of file	# 变更后的文件内容

注意:commitid输入顺序需要注意,先输入原来的版本,再输入提交后的版本,不然顺序会反

git的更改状态命令

当出现 将不必要的文件add上次提交觉得是错的 时,不想改变暂存区内容,只是想调整提交的信息==》版本回滚
git reset HEAD 文件名:移除不必要的添加到暂存区的文件
git reset HEAD^ 或者 git reset HEAD commitid:去掉上一次的提交
git reset --soft HEAD^:修改上次提交的信息,即commit -m "修改这里的内容"
git reset --soft:只是将HEAD引用指向指定的提交,工作区跟暂存区的内容不会改变
git reset --mixed:(默认选项)将HEAD指向指定的提交,暂存区的内容随之改变,工作区内容不变
git reset --hard:将HEAD指向指定的提交,暂存区跟工作区都会改变

git的分支合并及冲突解决命令

git merge 分支名:拿指定的分支名与当前分支进行合并
例:
1、main分支下file1文件内容,加入暂存区并提交:
在这里插入图片描述
2、进入dev分支,file1文件内容,加入暂存区并提交:
在这里插入图片描述
3、回到main分支使用git merge命令合并分支:
在这里插入图片描述
显示冲突区域:
在这里插入图片描述

git diff --name-only --diff-filter=U:用于查看产生冲突的文件
例:
在这里插入图片描述

git标签命令

git tag:不加任何参数表示显示标签(按字母序)非按时间
git tag 标签名:默认是给最近一次提交打上标签
git tag 标签名 commitId:给响应的提交打上标签
git show 标签名:显示该标签相关的那次提价的相关信息
git tag -d 标签名:删除该标签
git push 远程分支名 标签名:把某个标签(必须是本地已存在的,否则推动失败) 推送到远程分支

删除远程标签:

  • 删除本地标签 git tag -d 标签名
  • 在删除远程的 git push origin :refs/tags/标签名

标签跟commit挂钩,只要commit存在于多个分支,那么这几个分支就都能看到这个标签

gitignore

为什么要使用.gitignore文件?

大量与项目无关的文件全推到远程仓库上,同步的时候会非常慢,且跟编辑器相关的一些配置推上去之后,别人更新也会受其影响。所以,我们使用该文件,对不必要的文件进行忽略,使其不被git追踪。

一般情况下,.gitignore文件,在项目一开始创建的时候就创建,并推送到远程服务器上。这样大家初次同步项目的时候,就是用到该文件,避免以后,团队成员把与项目无关的文件,传到远程服务器上

.log表示忽略项目中所有以.log结尾的文件
123?.log表示忽略项目中所有以123加任意字符的文件
/error.log表示忽略项目中根目录中的error.log这个文件
src/main/test/表示忽略/src/main/test/目录下的所有文件
*.class表示匹配所有以.class为结尾的文件
**/java/匹配所有java目录下的所有文件
!/error.log表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定

对于已经提交到远程或本地仓库的文件,.gitignore配置之后不会生效。我们必须先删除本地暂存区里的文件,之后在加上.gitignore 文件,最后再把变更提交到远程仓库上。
git rm --cached 文件名:从暂存区删除某个文件
git rm -rf --cached 文件夹:表示递归删除暂存区该文件夹的所有东西

例:
想要同步当前目录下所有文件:
在这里插入图片描述
建立一个error.log文件:
在这里插入图片描述
在这里插入图片描述

此时使用git status查看,能看见error.log文件:
在这里插入图片描述

在.gitignore文件中加入*.log
在这里插入图片描述

再次使用git status查看,没有error.log文件了:
在这里插入图片描述

;