文章目录
什么是代码托管中心
定义:代码托管中心是网络服务器的远程代码仓库,也称为远程仓库
- 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
文件了: