Git介绍Git是目前世界上最先进的分布式版本控制系统(没有之一)。Linux之父Linux用C语言编写了Git分布式版本控制系统。分布式版本控制系统和集中式版本控制系统的区别在于有一个分布式的集中式中央服务器。版本库保存在中央服务器中。工作时需要从中心服务器获取最新版本代码。工作完成后,将代码推送到中央服务器。中央服务器出现问题,开发人员几乎无法工作。开发人员有一个必须连接到互联网的本地存储库(LocalRepository)。他们必须联网才能工作,对网络的依赖性很强。网络不好或者文件很大,文件提交的速度会受到很大的限制。没有必要。您也可以在没有网络的情况下进行commit、查看版本提交记录、分支操作。在有网络的情况下,执行push将代码从本地仓库推送到RemoteRepository。存储格式为原始文件,体积大,元数据小,分支操作创建一个新的分支,每个人都会有和你一样的分支。分支操作不会影响其他开发者。直接提交到中央版本库,先commit到本地仓库,然后推送到远程仓库,具有管理方便,逻辑清晰,使用快捷等优点;可以更好的保证代码的安全性;代码一致性非常高;具有良好的目录级权限控制体系,快速灵活,可随意切换分支;单机合并分支,方便开发者解决冲突;可以离线工作,不影响本地代码编写;公用服务器压力小,数据传输量小;缺点是对服务器性能要求高,数据量大;它必须连接到互联网;不适合开源;分支机构管理不灵活,不符合常规思维,学习周期比较长;代码保密性差,一旦开发者克隆了整个库,所有代码和版本信息都可以完全公开。创建版本库创建项目目录(mkdirGit)进入该目录(cdGit)初始化版本库(gitinit)会有一个.文件(如果没有看到,可能是你的电脑没有显示隐藏文件,可以在命令行工具中运行ls-ah查看)。$mkdirGit$cdGit$gitinit//在/Users/zhengdahua/Documents/Project/Private/Git/.git/中初始化一个空的Git仓库初始化一个空的仓库写一个README.md文件将README.md添加到临时存储中(gitaddREADME.md)确认提交文件到仓库(gitcommit-m'addexamplefile')。我们当前的项目目录是工作区。git初始化后会生成一个.git文件,也就是我们所说的版本库(respository)中有一个索引文件,也就是暂存区(stage),git也会自动生成一个分支master和一个指针head为我们指向分支。要了解更多信息,请移至git工作区、暂存区和存储库之间的关系。$typenul>README.md$gitaddREADME.md$gitcommit-m'addexamplefile'versionrollback检查存储库的状态(gitstatus)。下面命令的输出告诉我们document.md已被修改但尚未提交。?Gitgit:(master)gitstatusOnbranchmasterChangesnotstagedforcommit:(use"gitadd..."toupdatewhatwillbecommitted)(use"gitcheckout--..."丢弃工作目录中的更改)修改:docs/document.mdno添加到提交的更改(使用“gitadd”和/或“gitcommit-a”)?Gitgit:(master)?比较两个修改之间的差异(git差异)。“-”后面是删除的内容,“+”后面是新增的内容-###4.写一个README.md文件-###5.添加README.md到暂存区(git添加README.md)-###6.确认提交文件到仓库(gitcommit-m'添加示例文件')++4.编写README.md文件++5.将README.md添加到暂存区(gitaddREADME.md)查看提交日志(gitlog)。显示从最近到最近的提交日志commit241f77158c2d59b0b10e482b74a24150a0bebeb4(HEAD->master)Author:kevinDate:SunFeb2422:24:512019+0800更新文档.mdcommitf953ccc298a430939e5e64eeedd49cc2db5a3fdb作者:kevin日期:2019年2月24日21:43:08周日+0800回滚版本(gitreset--hardHEAD^)。用HEAD表示当前版本,那么HEAD^就是上一个版本,HEAD^代表上一个版本,HEAD~100代表前一百个版本,“241f77158c2d59b0b10e482b74a24150a0bebeb4”指的是版本id,我们要回退到指定的version只需要id的前几位,最好5位以上。回滚指定版本(gitreset--hardf953c)。查看所有分支的版本操作记录(gitreflog)。当你使用$gitreset--hardHEAD^回到之前的版本,然后想恢复到appendGPL时,你必须找到appendGPL的commitid,可以通过gitreflogappendGPL的commitid.241f771(HEAD->master)HEAD@{0}:reset:movingto241f771f953cccHEAD@{1}:reset:movingtoHEAD^241f771(HEAD->master)HEAD@{2}:commit:updatedocument.mdf953cccHEAD@{3}:commit(amend):添加第一个文件bd07a32HEAD@{4}:commit(amend):添加第一个文件98f7467HEAD@{5}:commit(initial):添加第一个文件修改管理Git不跟踪文件相关的文件的文件名和目录名,但跟踪文件的内容,请参阅Git跟踪内容详细信息。因此,文件的每一次修改都需要通过gitadd添加到暂存区,然后提交到版本库。更改撤销(gitcheckout--README.md)。这里有两种情况:一种是README.md修改后没有放到暂存区,现在撤消修改会回到和版本库一样的状态;另一种是在暂存区添加了readme.txt后,再次修改。现在,如果撤销修改,则恢复到加入暂存区后的状态。简而言之,就是把这个文件恢复到上次gitcommit或者gitadd的状态。删除文件。工作区直接删除文件并提交到版本库。远程存储库为了在任何Git项目上进行协作,您需要知道如何管理自己的远程存储库。远程仓库是指你的项目的版本库托管在互联网或者其他网络上,比如github、gitlab、码云,或者自己用服务器搭建的远程仓库。您可以拥有多个远程存储库,通常一些存储库对您来说是只读的,而一些是可读写的。与他人协作涉及管理远程存储库以及根据需要推送或拉取数据。管理远程包括了解如何添加远程、删除无效远程、管理不同的远程分支以及定义它们是否被跟踪等等。创建SSH密钥。检查用户目录下是否有.ssh文件目录(电脑需要显示隐藏文件),如果有则检查是否有id_rsa(私钥)和id_rsa.pub(公钥)。有的话直接跳过第一步,没有的话创建SSHKey,把邮箱换成自己的邮箱,一路回车。$ssh-keygen-trsa-C"youremail@example.com"上传公钥登录GitHub,打开“账户设置”,“SSHKeys”页面;然后,点击“AddSSHKey”,填写任意Title,输入Key将id_rsa.pub文件内容粘贴到文本框中。注意:Github通过公钥识别你,确认只有你可以push。GitHub允许您添加多个密钥。如果有多台电脑,将每台电脑的公钥添加到GitHub,这样无论你使用哪台电脑,都可以将代码推送到Github。添加远程存储库。在github上创建一个项目,在Repositoryname中填写项目名称(Git),保持默认设置。点击“Createrepository”按钮,就成功创建了一个新的Gitrepository。目前,GitHub上的Git仓库还是空的。GitHub告诉我们可以从这个仓库克隆一个新的仓库,或者关联一个已经存在的本地仓库,然后把本地仓库的内容推送到GitHub。库。现在,我们根据GitHub提示在本地Git仓库下运行命令:$gitremoteaddorigingit@github.com:dahuazheng/Git.git注意:dahuazheng将远程仓库添加到你的github账户名后,远程仓库名字是origin,这是Git默认的名字,可以改成别的,但是名字origin一看就知道是远程库,然后把本地库的内容全部推送到远程library:$gitpush-uoriginmaster将本地library的内容推送到远程,使用gitpush命令实际将当前分支master推送到远程。由于远程库是空的,所以我们在第一次pushmaster分支的时候,加上-u参数。Git不仅会将本地master分支的内容推送到远程新的master分支,而且推送本地master分支和远程master分支可以关联起来,以简化以后推送或拉取时的命令。克隆远程仓库(gitclone)Git支持多种协议,默认使用ssh,也可以使用https等其他协议。通过ssh支持的本机git协议是最快的。使用https除了速度慢之外,最大的麻烦就是每次push都要输入密码,但是在一些只开放http端口的公司,不能使用ssh协议,只能使用https。使用ssh示例$gitclonegit@github.com:dahuazheng/vue-note.git使用https示例$gitclonehttps://github.com/dahuazheng...