这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战git
版本控制是一种记录一个或若干文件内容变化,以便未来查阅特定版本修订状况的系统。 在公司中,通常以团队的形式进行项目的开发。在一个团队中,每个团队成员都须要一份相同的代码,而你们又都基于这份代码去开发着不一样的功能,过程当中就会产生至关多的问题,针对这些问题,咱们能够采用版本控制的方式来解决,也所以诞生了不少的版本控制工具,如市面上比较常见的 cvs/svn/git 等等。程序员
有了它你就能够将某个文件回溯到以前的状态,甚至将整个项目都回退到过去某 个时间点的状态。就算你乱来一气把整个项目中的文件改的改删的删,你也照样能够轻松恢复到原先的样子。但额外增长的工做量却微乎其微。 你能够比较文件的变化细节,查出最后是谁修改了哪一个地方,从而找出致使怪异 问题出现的缘由,又是谁在什么时候报告了某个功能缺陷等等。 版本控制深刻程序员在团队配合中,若是你的项目没有版本控制:算法
目前市面上主要有两种类型的版本控制工具:shell
集中化的版本控制系统诸如 CVS,svn 以及 Perforce 等,都有一个单一的集中管理的服务器,保存全部文件的修订版本,而协同工做的人们都经过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准作法。数据库
这种作法带来了许多好处,如今,每一个人均可以在必定程度上看到项目中的其余人正在作些什么。而管理员也能够轻松掌控每一个开发者的权限,而且管理一个集中化的版本控制系统; 要远比在各个客户端上维护本地数据库来得轻松容易。 事分两面,有好有坏。这么作最显而易见的缺点是中央服务器的单点故障。若是服务器宕机一小时,那么在这一小时内,谁都没法提交更新,也就没法协同工做。同时他必须联网才能工做,若是在局域网内还好,带宽够大,速度够快,可若是在互联网上,遇到网速慢的话,可能提交一个10M的文件就须要5分钟。缓存
因而分布式版本控制系统面世了。在这类系统中,像 Git,BitKeeper 等,客户端并不仅提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工做用的服务器发生故障,过后均可以用任何一个镜像出来的本地仓库恢复。由于每一次的提取操做,实际上都是一次对代码仓库的完整备份。安全
分布式的版本控制系统在管理项目时 存放的不是项目版本与版本之间的差别.它存的是索引(所需磁盘空间不多 因此每一个客户端均可以放下整个项目的历史记录) 和集中式版本控制系统相比,分布式版本控制系统的安全性要高不少,由于每一个人电脑里都有完整的版本库,某一我的的电脑坏掉了没关系,随便从其余人那里复制一个就能够了。而集中式版本控制系统的中央服务器要是出了问题,全部人都无法干活了。 在实际使用分布式版本控制系统的时候,其实不多在两人之间的电脑上推送版本库的修改,由于可能大家俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。所以,分布式版本控制系统一般也有一台充当“中央服务器”的电脑,但这个服务器的做用仅仅是用来方便“交换”你们的修改,没有它你们也同样干活,只是交换修改不方便而已。bash
Git 是目前世界上最早进的分布式版本控制系统。同生活中的许多伟大事件同样,Git诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工做都花在了提交补丁和保存归档的繁杂事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合做关系结 束,他们收回了无偿使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )不得不吸收教训,只有开发一套属于本身的版本控制系统才不至于重蹈覆辙。 自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,它还有着使人难以置信的非线性分支管理系统能够应付各类复杂的项目开发需求。服务器
Git的官网Windows版本,下载完安装包以后,双击 exe 安装包,进行安装。markdown
完成安装以后,就可使用命令行的 git 工具(已经自带了 ssh 客户端)。在桌面或者任意文件夹的空白位置右键,出现下图所示的这个菜单栏即表示安装成功。
当你点击 git bash Here 菜单以后,能够看到一个终端窗口,在终端里面输入命令 就能够查看到版本信息。
git --version
复制代码
Git的官网Mac版本,下载下来以后能够看到一个 dmg 文件,双击打开 压缩文件,能够看到里面有一个文件, 再次双击 pkg 文件,就能够进行安装,而后按照引导一直点击继续按钮就能够完成安装了。
由于Git
是分布式版本控制系统,因此,每一个机器都必须自报家门:你的名字和Email地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,因此会随更新内容一块儿被永久归入历史记录。咱们能够在Git命令行输入两条命令进行配置:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
复制代码
要检查已有的配置信息,可使用 以下命令:
git config --list
复制代码
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:
git init
复制代码
执行完后咱们能够发现当前目录下多了一个.git
的目录,这个目录是Git
来跟踪管理版本库的。全部 Git 须要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边全部的文件和目录,但咱们尚未开始跟踪管理项目中的任何一个文件。
在添加以前先作一个标记操做。其实是先将文件添加到缓存区, 而后再添加到版本库。 先使用命令告诉Git:把文件交给 Git 进行管理
git add
复制代码
而后再告诉Git
,把文件提交到本地仓库
git commit -m "wrote a readme file"
复制代码
-m
后面输入的是本次提交的说明,能够输入任意内容,固然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。git commit
命令执行成功后会告诉你,1个文件被改动(咱们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。
在执行 commit 以前,都先执行一下 add 操做,避免有文件被漏掉了
在git中进行 crud 操做时都须要执行 git add 文件这个操做,底层操做将操做文件添加一个叫缓存区区域中缓存,当操做完毕以后,使用 git commit 操做,进行统一提交,将编辑文件统一同步版本中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-igqUf3nC-1620290751987)(G:\叩丁狼\高级框架\四、Git\资料\images\git\图片 35.png)]
如何查看项目目前的状态?我在电脑前写了一段时间代码,用Git管理,中途上厕所,而后又去吃了个苹果,继续回来工做,不记得以前用Git干了些什么了?
# 查看当前git版本库的状态(查看缓存区中的文件内容)
git status
复制代码
咱们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,因此版本控制系统确定有某个命令能够告诉咱们历史记录。
git log
复制代码
git log
命令显示从最近到最远的提交日志,若是嫌输出信息太多,看得眼花缭乱的,能够试试加上--pretty=oneline
参数:
git log --pretty=oneline
复制代码
咱们能够看到,commit id 是一串长长的字符,而不是数字,缘由是由于当两我的同时在一个代码上工做时候,分别往各自的本地的版本库提交时,相同的提交号对应着不一样的修改,若是使用1,2,3
这样的数字不能保证惟一性,因此Git
使用SHA-1
算法产生惟一标识符,保证全球惟一。 好比程序员甲和乙负责共同开发一个聊天软件,使用Git
来版本控制。 Git
是分布式版本控制,每一个人都有一个版本库。若是Git
版本控制用1,2,3
这样的数字来生成版本号,那么程序员甲和乙代码合并的时候就会出现问题。版本1究竟是谁的? SVN
是集中式的版本控制,只有一个版本库,因此版本号能够从1,2,3
开始。Git
是分布式版本控制,每一个人都有一个版本库,因此不能从1,2,3
开始。
若是一个文件知道被人修改了,但若是能看看具体修改了什么内容,天然是更好的 好比你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt
,因此,须要用git diff
这个命令看看:
# 查看不一样版本之间的文件差别
git diff
复制代码
每当你以为文件修改到必定程度的时候,就能够**“保存一个快照”**,这个快照在Git
中被称为 commit
。一旦你把文件改乱了,或者误删了文件,还能够从最近的一个commit
恢复,而后继续工做,而不是把几个月的工做成果所有丢失。
Git
必须知道当前版本是哪一个版本,在Git
中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,固然往上100个版本写100个^比较容易数不过来,因此写成HEAD~100
。
若是咱们要把当前版本回退到上一个版本,就可使用git reset
命令:
git reset --hard HEAD^
复制代码
回到指定版本
git reset --hard <commit id>
复制代码
git checkout -- filename
能够丢弃工做区的修改:-- 后面是一个空格,好比:
git checkout -- readme.txt
复制代码
这个命令的意思是说把readme.txt
文件在工做区的修改所有撤销,这里有两种状况:
readme.txt
自修改后尚未被放到暂存区(git add
),如今,撤销修改就回到和版本库如出一辙的状态;readme.txt
已经添加到暂存区后,又做了修改,如今,撤销修改就回到添加到暂存区后的状态。 总的来讲就是让这个文件回到最近一次 git commit
或 git add
时的状态。
git checkout -- file
命令中的 --
很重要,没有 --
,就变成了“切换到另外一个分支”的命令。
通常状况下,你一般直接在文件管理器中把没用的文件删了,或者用rm
命令删了:
git rm test.txt
复制代码
Git 拥有强大的分支管理系统,且推荐在项目开发过程当中大量的使用分支来解决各类项目中的问题。
咱们可使用命令去查看当前分支。
git branch
复制代码
咱们可使用命令去建立分支。
git branch 分支名字
复制代码
git checkout 分支名字
复制代码
git checkout -b 分支名字
复制代码
git merge 分支名
复制代码
git branch -d 分支名
复制代码
git init
复制代码
git config --global user.name "码云里面用户名"
git config --global user.email "码云里面注册邮箱/手机"
复制代码
配置忽略提交的文件.gitignore
将项目添加到本地仓库
git add .
git commit -m "项目初始化"
复制代码
git remote add origin 本身在码云建立仓库路径
复制代码
git push -u origin master
复制代码
感谢阅读,但愿能对你有所帮助 博文如有瑕疵请在评论区留言或在主页我的介绍中添加我私聊我,感谢每一位小伙伴不吝赐教