❤Git真的就是Pull和Push吗?❤

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战git

1、版本控制

1.一、什么是版本控制

    版本控制是一种记录一个或若干文件内容变化,以便未来查阅特定版本修订状况的系统。     在公司中,通常以团队的形式进行项目的开发。在一个团队中,每个团队成员都须要一份相同的代码,而你们又都基于这份代码去开发着不一样的功能,过程当中就会产生至关多的问题,针对这些问题,咱们能够采用版本控制的方式来解决,也所以诞生了不少的版本控制工具,如市面上比较常见的 cvs/svn/git 等等。程序员

1.二、为何要有版本控制

    有了它你就能够将某个文件回溯到以前的状态,甚至将整个项目都回退到过去某 个时间点的状态。就算你乱来一气把整个项目中的文件改的改删的删,你也照样能够轻松恢复到原先的样子。但额外增长的工做量却微乎其微。     你能够比较文件的变化细节,查出最后是谁修改了哪一个地方,从而找出致使怪异 问题出现的缘由,又是谁在什么时候报告了某个功能缺陷等等。     版本控制深刻程序员在团队配合中,若是你的项目没有版本控制:算法

  1. 代码管理混乱。
  2. 解决代码冲突困难。
  3. 在代码整合期间引起BUG。
  4. 没法对代码的拥有者进行权限控制。
  5. 项目不一样版本发布困难。

1.三、版本控制工具分类

    目前市面上主要有两种类型的版本控制工具:shell

  1. 集中化的版本控制系统
  2. 分布式的版本控制系统

1.3.一、 集中化的版本控制系统

    集中化的版本控制系统诸如 CVS,svn 以及 Perforce 等,都有一个单一的集中管理的服务器,保存全部文件的修订版本,而协同工做的人们都经过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准作法。数据库

image-20210404120152628     这种作法带来了许多好处,如今,每一个人均可以在必定程度上看到项目中的其余人正在作些什么。而管理员也能够轻松掌控每一个开发者的权限,而且管理一个集中化的版本控制系统; 要远比在各个客户端上维护本地数据库来得轻松容易。     事分两面,有好有坏。这么作最显而易见的缺点是中央服务器的单点故障。若是服务器宕机一小时,那么在这一小时内,谁都没法提交更新,也就没法协同工做。同时他必须联网才能工做,若是在局域网内还好,带宽够大,速度够快,可若是在互联网上,遇到网速慢的话,可能提交一个10M的文件就须要5分钟。缓存

1.3.二、分布式的版本控制系统

    因而分布式版本控制系统面世了。在这类系统中,像 Git,BitKeeper 等,客户端并不仅提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工做用的服务器发生故障,过后均可以用任何一个镜像出来的本地仓库恢复。由于每一次的提取操做,实际上都是一次对代码仓库的完整备份。安全

image-20210404120613873     分布式的版本控制系统在管理项目时 存放的不是项目版本与版本之间的差别.它存的是索引(所需磁盘空间不多 因此每一个客户端均可以放下整个项目的历史记录)     和集中式版本控制系统相比,分布式版本控制系统的安全性要高不少,由于每一个人电脑里都有完整的版本库,某一我的的电脑坏掉了没关系,随便从其余人那里复制一个就能够了。而集中式版本控制系统的中央服务器要是出了问题,全部人都无法干活了。     在实际使用分布式版本控制系统的时候,其实不多在两人之间的电脑上推送版本库的修改,由于可能大家俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。所以,分布式版本控制系统一般也有一台充当“中央服务器”的电脑,但这个服务器的做用仅仅是用来方便“交换”你们的修改,没有它你们也同样干活,只是交换修改不方便而已。bash

1.四、Git简史

    Git 是目前世界上最早进的分布式版本控制系统。同生活中的许多伟大事件同样,Git诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工做都花在了提交补丁和保存归档的繁杂事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。     到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合做关系结 束,他们收回了无偿使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )不得不吸收教训,只有开发一套属于本身的版本控制系统才不至于重蹈覆辙。     自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,它还有着使人难以置信的非线性分支管理系统能够应付各类复杂的项目开发需求。服务器

2、Git的安装

2.一、在Windows上安装

    Git的官网Windows版本,下载完安装包以后,双击 exe 安装包,进行安装。markdown

image-20210404121325510

图片 10_2

图片 10_2

    完成安装以后,就可使用命令行的 git 工具(已经自带了 ssh 客户端)。在桌面或者任意文件夹的空白位置右键,出现下图所示的这个菜单栏即表示安装成功。

image-20210404121507806

    当你点击 git bash Here 菜单以后,能够看到一个终端窗口,在终端里面输入命令 就能够查看到版本信息。

git --version
复制代码

image-20210404121723709

2.二、在Mac上安装

    Git的官网Mac版本,下载下来以后能够看到一个 dmg 文件,双击打开 压缩文件,能够看到里面有一个文件, 再次双击 pkg 文件,就能够进行安装,而后按照引导一直点击继续按钮就能够完成安装了。

3、Git初始化

3.一、Git初始化配置

    由于Git是分布式版本控制系统,因此,每一个机器都必须自报家门:你的名字Email地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,因此会随更新内容一块儿被永久归入历史记录。咱们能够在Git命令行输入两条命令进行配置:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
复制代码

    要检查已有的配置信息,可使用 以下命令:

git config --list 
复制代码

3.二、初始化仓库

    要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:

git init
复制代码

    执行完后咱们能够发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的。全部 Git 须要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边全部的文件和目录,但咱们尚未开始跟踪管理项目中的任何一个文件。

3.三、.git目录详解

image-20210404122800857

  1. hooks 目录包含客户端或服务端的钩子脚本;
  2. info 包含一个全局性排除文件
  3. logs 保存日志信息
  4. objects 目录存储全部数据内容;
  5. refs目录存储指向数据的提交对象的指针(分支)
  6. config 文件包含项目特有的配置选项
  7. description用来显示对仓库的描述信息
  8. HEAD 文件指示目前被检出的分支
  9. index 文件保存暂存区信息

4、Git的使用

4.一、使用git命令将文本添加到版本库中

    在添加以前先作一个标记操做。其实是先将文件添加到缓存区, 而后再添加到版本库。     先使用命令告诉Git:把文件交给 Git 进行管理

git add
复制代码

    而后再告诉Git,把文件提交到本地仓库

git commit -m "wrote a readme file"
复制代码

    -m后面输入的是本次提交的说明,能够输入任意内容,固然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。git commit命令执行成功后会告诉你,1个文件被改动(咱们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。

    在执行 commit 以前,都先执行一下 add 操做,避免有文件被漏掉了

4.二、工做区和暂存区

    在git中进行 crud 操做时都须要执行 git add 文件这个操做,底层操做将操做文件添加一个叫缓存区区域中缓存,当操做完毕以后,使用 git commit 操做,进行统一提交,将编辑文件统一同步版本中。

图片 33_2

图片 34_2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-igqUf3nC-1620290751987)(G:\叩丁狼\高级框架\四、Git\资料\images\git\图片 35.png)]

4.三、查看版本库状态

    如何查看项目目前的状态?我在电脑前写了一段时间代码,用Git管理,中途上厕所,而后又去吃了个苹果,继续回来工做,不记得以前用Git干了些什么了?

# 查看当前git版本库的状态(查看缓存区中的文件内容)
git status 
复制代码

图片 26_2

4.四、查看日志

    咱们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,因此版本控制系统确定有某个命令能够告诉咱们历史记录

git log
复制代码

图片 22_2

    git log 命令显示从最近到最远的提交日志,若是嫌输出信息太多,看得眼花缭乱的,能够试试加上--pretty=oneline参数:

git log --pretty=oneline
复制代码

图片 23_2

    咱们能够看到,commit id 是一串长长的字符,而不是数字,缘由是由于当两我的同时在一个代码上工做时候,分别往各自的本地的版本库提交时,相同的提交号对应着不一样的修改,若是使用1,2,3这样的数字不能保证惟一性,因此Git使用SHA-1算法产生惟一标识符,保证全球惟一。     好比程序员甲和乙负责共同开发一个聊天软件,使用Git来版本控制。 Git是分布式版本控制,每一个人都有一个版本库。若是Git版本控制用1,2,3这样的数字来生成版本号,那么程序员甲和乙代码合并的时候就会出现问题。版本1究竟是谁的?     SVN 是集中式的版本控制,只有一个版本库,因此版本号能够从1,2,3开始。Git是分布式版本控制,每一个人都有一个版本库,因此不能从1,2,3开始。

4.五、查看差别

    若是一个文件知道被人修改了,但若是能看看具体修改了什么内容,天然是更好的 好比你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,因此,须要用git diff这个命令看看:

# 查看不一样版本之间的文件差别
git diff 
复制代码

4.六、版本回退

    每当你以为文件修改到必定程度的时候,就能够**“保存一个快照”**,这个快照在Git中被称为 commit。一旦你把文件改乱了,或者误删了文件,还能够从最近的一个commit 恢复,而后继续工做,而不是把几个月的工做成果所有丢失。

    Git必须知道当前版本是哪一个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,固然往上100个版本写100个^比较容易数不过来,因此写成HEAD~100

    若是咱们要把当前版本回退到上一个版本,就可使用git reset命令:

git reset --hard HEAD^
复制代码

图片 30_2

    回到指定版本

git reset --hard <commit id>
复制代码

图片 31_2

4.七、撤销修改

    git checkout -- filename能够丢弃工做区的修改:-- 后面是一个空格,好比:

git checkout -- readme.txt
复制代码

    这个命令的意思是说把readme.txt文件在工做区的修改所有撤销,这里有两种状况:

  1. readme.txt 自修改后尚未被放到暂存区(git add),如今,撤销修改就回到和版本库如出一辙的状态;
  2. readme.txt 已经添加到暂存区后,又做了修改,如今,撤销修改就回到添加到暂存区后的状态。

    总的来讲就是让这个文件回到最近一次 git commitgit add 时的状态。

    git checkout -- file 命令中的 -- 很重要,没有 -- ,就变成了“切换到另外一个分支”的命令。

4.八、删除文件

    通常状况下,你一般直接在文件管理器中把没用的文件删了,或者用rm命令删了:

git rm test.txt
复制代码

4.九、分支管理

    Git 拥有强大的分支管理系统,且推荐在项目开发过程当中大量的使用分支来解决各类项目中的问题。

image-20210426181502639

4.9.一、查看分支

    咱们可使用命令去查看当前分支。

git  branch
复制代码

图片 45_2

4.9.二、建立分支

    咱们可使用命令去建立分支。

git  branch 分支名字
复制代码

图片 46_2

4.9.三、切换分支

git checkout 分支名字
复制代码

4.9.四、建立+切换分支

git checkout -b 分支名字
复制代码

4.9.五、合并到当前分支

git merge 分支名
复制代码

4.9.六、删除分支

git branch -d 分支名
复制代码

5、推送远程仓库命令

  1. 初始化本地的仓库
git init
复制代码
  1. 设置码云的用户名跟码云注册邮箱
git config --global user.name "码云里面用户名"
git config --global user.email "码云里面注册邮箱/手机"
复制代码
  1. 配置忽略提交的文件.gitignore

  2. 将项目添加到本地仓库

git add .
git commit -m "项目初始化"
复制代码
  1. 配置远程仓库请求路径
git remote add origin 本身在码云建立仓库路径
复制代码
  1. 将本地仓库中crm项目推送到远程仓库
git push -u origin master
复制代码
  1. 弹出一个框, 输入码云帐号与密码

6、团队开发注意事项

  1. 组员每次开发,都先 push 到本身的远程分支
  2. 每次对 master 分支作合并或推送以前,原地备份代码
  3. 确保本身分支的代码与 master 分支都没有错误之后,将本地 master 推送到远程
  4. 开发前,先切换到 master 分支,更新代码,确保是最新版本,若是有更新下来内容,一样先对整个项目进行备份,再切换到本身的分支,而后将 master 合并到本身的分支上
  5. 除了将代码提交到本身的分支之外,都必须再将本身的代码合并到master
  6. 再次强调,每次合并或推送前,都先对项目进行备份,避免操做不熟练致使出错后代码丢失

码云开发流程

✨往期回顾

感谢阅读,但愿能对你有所帮助 博文如有瑕疵请在评论区留言或在主页我的介绍中添加我私聊我,感谢每一位小伙伴不吝赐教

相关文章
相关标签/搜索