石家庄门户网站建设,微信公众号h5网站开发,上海seo网站优化软件,网站建设过程发生的费用文章目录 初步了解版本控制器git版本控制版本控制器对版本控制器的需求版本控制器git分布式版本控制(去中心化)github和gitee是什么 git的简史在github/gitee创建项目安装gitgit的基础操作克隆仓库查看.gitignore git三板斧将文件添加到暂存区提交到本地仓库(处理第一次提交问题… 文章目录 初步了解版本控制器git版本控制版本控制器对版本控制器的需求版本控制器git分布式版本控制(去中心化)github和gitee是什么 git的简史在github/gitee创建项目安装gitgit的基础操作克隆仓库查看.gitignore git三板斧将文件添加到暂存区提交到本地仓库(处理第一次提交问题)将文件推送至远端仓库(同步两端仓库) 部分查看指令查看过往提交记录查看仓库状态 更新仓库 初步了解版本控制器git
本片文章隶属于专栏——git的相关使用。本篇文章开始将开始学习一些git的相关操作和学习一些相关知识加深对git的理解。
如果有使用过github/gitee两个网站的网友都知道这两个网站内提供了远端的仓库。我们可以将本地计算机中的一些文件提交到远端进行保存。需要的时候也可以将远端仓库拉取下来。这些操作都离不开一个重要的软件——git。那么什么是git呢
版本控制
学习git之前我们得理解什么是版本控制。只有理解了版本控制我们才能更深刻地明白git的作用接下来我们将一起来看看何为版本控制。
这里我们举一个生活中常见的例子 假设你是一个公司里员工一天领导叫你攥写一份市场调研报告。我们提交了初稿上去但是领导说不满意我们就在原来的初稿文件上修改。然后等我们修改了若干次后领导说了一句”后面写的还不如初稿呢干脆就拿初稿来好了“。这个时候你的心里必然是奔腾过1w只羊驼心想这叫什么个事儿啊。 就如上图所示改来改去发现不如初稿。但是这里有一个问题就是这个初稿早就给改的面目全非了。因为是再原基础上进行修改的所以也根本不记得初稿写的是怎么样的了。这个时候就该抓瞎了。
所以这里必然引入了一个问题叫版本控制。即每一次我们都需要留下对应的版本这是为了应对善变的甲方需要采取的万全之策。
所以这里最简单的方法就是每写一个版本就把一个版本保存下来。然后复制一份再去以此进行修改。就如下图所示这就是最简单的版本管理。 这样子我们就有任意多个版本这样子就不怕上面遇到的那个问题了。
版本控制器
对版本控制器的需求
前面稍微地了解了版本控制器的概念但是自行管理版本是很烦闷的一件事情。如果只是简简单单的管理一份报告那其实还好。最多也就是开一个文件夹里面保存着各个版本的报告而已。但是如果是工程代码呢
工程代码的文件数是非常庞大的需要管理的内容也更多更细。如果知识简单粗暴的进行复制粘贴副本在副本上进行修改。看似可以实则非常浪费。因为每次改动一版就要复制一份完整的源码然后修改完之后再重新存放回仓库里面这岂不是很浪费空间如果一份工程里面所有的文件是1GB那么每管理一次版本就要占用1GB的内存这也太浪费了。
此外人力管理也是非常疲惫的有时候我们还不止是不同版本的管理的问题。进行版本管理的原因就是文件内容不符合要求。那我们就需要记录一下每一个版本对应的问题。但是随着时间一长文件又多我们肯定是记不住大部分修改的内容的。
所以这里就迫切二点需要一个能够进行自动管理文件版本的能够记录每一次修改的变化及其修改原因并且能够轻松的溯源历史上所有的版本而且还要尽可能地占用小的存储空间。基于上面地种种原因这才有了像git这类的一系列的版本控制工具。
版本控制器git
我们现在的需求是能够有一个软件对我们本地的一个仓库(其实就是一个文件夹)内的文件进行版本管理。而且要能够满足上面提及的那些要求那么git是如何做的呢
首先我们要知道git的本质就是个版本控制的工具就是用来帮我们做版本控制的
当我们使用git软件管理某个仓库的时候在该仓库内会存放着一个隐藏文件夹.git这个隐藏文件夹内部其实就是git进行管理仓库内文件的一些必要的配置信息和文件(这点先作为了解后面部分会细讲)。
然后git的版本管理并不是我们理解的那样使用复制旧版本再进行修改得到新版本从而记录住一个文件有多个不同的版本。我们说过那样是特别浪费空间的。git版本控制的时候对于文件相同的部分不做记录只记录新版本相对于旧版本的变化的点。所以我们可以通过特定指令调取出每个版本之间变化点是什么。git也就是根据这个进行版本的溯源的。 比如初稿写了十行代码然后第一次减少了第5行。那么git就会记录从第一个版本到第二个版本的变化就是删除第五行代码那么想要从第二个版本回退到第一个版本只需要逆向操作在第5行添加删除的代码即可。 我们想要旧版本这种操作就叫做回退。git会做文件变化的逆向操作。如果想要从旧版本变到新版本这个就按照记录信息操作下去就可以了。(git支持版本回溯)。 这样一来git通过只记录变化信息的方式不仅可以轻松的在版本之间切换还极大地减少了版本控制所需要的存储空间这是一举两得。
同时git在版本管理的时候还支持备注功能。即进行版本控制的时候我们可以自行输入本次修改的原因这样子我们就可以很轻松的查询每一个版本对应的修改原因了。
分布式版本控制(去中心化)
这个话题我们稍微地了解一下即可。
当前市面上是有很多种版本控制工具的版本控制工具又被分为两大类别 即集中式版本控制系统和分布式版本控制系统。
集中式最常见的工具就是SVN。对于集中式我们可以这么理解 即所有的版本控制操作必须交给一个中央仓库进行管理。所有人的代码都是这样只要想用SVN进行版本管理就必须交付给中央仓库这个中间装置通过这个中间装置来进行一系列地操作等于是围着中央仓库转。而且也支持目录级权限的管理适合企业内网做开发。 但是这个方式最大的缺点就是太过依赖于中央仓库并且需要联网使用。而且不同的用户之间是不能互相的进行仓库的拉去和提交操作的。
而我们要讲的git其实是一个分布式的版本控制工具。它和SVN这样的区别就大了。它的架构是分布式的即不需要像集中式那样所有事情必须交给中央仓库来做。 分布式根本没有中心而言只要两端都装了git这个工具那么就可以进行互相操作。比如A和B都装了git那么A可以把代码提交到B所在的A开辟的对应的仓库也可以从仓库里面拉取东西。反过来B对A也是一样的。 就如上图所示(没有完全展示所有git用户之间的关系)正是因为git这种分布式架构它的操作速度特别快而且也非常方便。非常适合开源项目、团队协作。灵活性也很强。而且最重要的是它可以配合github等一系列平台进行结合使用(后面会说)。
所以从某种意义上来说git不仅仅是一个客户端(client)也是一个服务器(server)。因为它既可以在本地进行管理也可以作为其他端的服务器进行接收存储和管理。
github和gitee是什么
我们前面一直在提一个词叫”本地仓库“。难道还有不是本地的没错我们常用的github/gitee就是很多人会把github这类网站平台理解为git。其实这是错的它们有关联但不是完全一样。现在我们来讲一下它们到底是什么。
其实我们当前只要下载了git这个软件就已经是可以在我们自己的电脑上进行文件的版本管理了。但是我们又会经常把自己的代码等相关文件提交到gitee/github上这是为什么呢
其实所谓的github/gitee就是一个网站这个网站背后连接了一个云服务器。这个云服务器上安装了git这个软件。我们前文提到git本身即使客户端也是服务器。所以gitee/github对应的云服务器也是可以进行接收我们上传的文件的。所以我们就可以把在自己电脑中的需要管理的仓库上传到云服务器中云服务器中可以开一个一模一样的仓库(文件夹)进行管理上传的文件。这就是远端仓库我们可以理解为云盘一样的东西存在。只不过说gitee和github在面对个人的情况下(或人少的情况下)是免费的。
所以像github/gitee本质是一个基于git的托管平台。它们只是一个网站但是这个网站是配合着一个云服务器的。这个云服务器上面装了git只要我们的机器上装了git就可以实现两端的仓库管理。
类比解释 Git 本身相当于一个本地版本控制工具类似单机版的存档系统 GitHub/Gitee相当于给你的 Git 仓库加了一个“云盘”并附赠了多人协作的“办公软件”如在线编辑、任务分配)
只不过相较于简单的云端存储还围绕 Git 构建了完整的开发者生态(社区、自动化工具等)。所以从今往后就不要再把git和gitee/github这样的网站平台搞混了。
git的简史
这里稍微地来聊一下git的简史。稍微了解一下即可。
这个事情其实要回归到Linux系统的开发过程来说。我们知道Linux系统是一个开源的系统是由世界上很多有伟大的愿景/梦想的工程师一起开发的。当时开发的时候就面临着一个问题就是Linux之父——Linus Torvalds在写好了初版的Linux内核后就把它开源让世界上的人都参与进来。这样他就会每天都收到很多代码。
那Linus Torvalds每天就会看看哪里写得好就给他合并进去。但是Linus Torvalds也是遇到了很困难的问题——即也需要版本管理。要不然每天都是ctrl c/v也是很费劲费时。所以他就想要去找对应的版本控制工具。
但是当时市面上的版本控制工具都是收费的。Linux之父认为收费有违开源精神就不愿意。但是有一个公司开发的BitKeeper(一个商业版分布式版本控制系统)愿意免费提供给Linux开发团队用但是好景不长后面免费使用权给撤销了。
所以Linus Torvalds就忍不了了直接自行写出了git的雏形然后开源。然后大量的工程师涌入git这个工具的开发然后开发完后再拿对Linux开发做版本管理。最后Linux和git一起上线了。
最后由于git这个工具写的实在是太厉害太好经过长时间的发展越来越多的企业和用户选择使用git。目前git的市场份也比SVN大得多。
在github/gitee创建项目
这里我们来简单提一下如何在github/gitee上创建一个仓库。但是这里要注意的是由于github的服务器在外网我们国家是没有办法直接使用github的。所以在这里选择使用gitee来进行操作。后序的代码提交大部分也是放到gitee上。
gitee是国内自主开发的平台我们直接使用的话访问速度极快。
1.首先我们需要注册账号(如果有了就跳过此步) 这里会要求我们输入账户名和邮箱等按照要求填写即可注意要记得用户名和邮箱这个是有用的这个后面会说。
2.在我的界面开源看到“新建”操作这个就是用来创建仓库的。 如图所示旁边也会有我们提交的动态。里面的内容其实就是我们每次提交的时候的备注。
3.点击新建进入仓库创建页面 仓库名称按照需求填写即可。
然后底下会有开源和私有选择这个看个人想法。开源即把自己的仓库放出来能够让人搜得到而已。私有的就只有自己能看见。
4.配置仓库 然后我们会发现底下其实还会有一些选项其实不选也可以因为默认的完全够用只不过还需要做一些调整。 初始化仓库里面可以选择语言。我们选择c因为我提交的代码都是c。当然也可以根据自己学习的语言来进行选择。后面的.gitignore选择一样的语言即可。等下会说这个文件的作用这个还是很重要的。开源许可证其实默认就可以(因为我们的目前来说基本上只有自己看所以选择什么都无所谓)。
后面的分支模型选择单分支模型master当然不选择默认就是这个。这里也是一样的由于我们当前还不熟悉git的分支操作而且我们自己提交的代码也不是什么企业大工程完全没有必要搞多分支模型所以默认即可。
安装git
前面说了那么多如果真的想配合gitee使用管理我们的本地仓库和远端仓库我们当前的机器上也是需要安装git这个软件的。
我们可以在Windows系统上安装还可以配合一些图形化界面工具进行辅助操作。但是Windows系统下的就不去介绍了上网搜一下就可以了。 而且对于git的指令来说在Windows和Linux下都是一样的所以这里直接拿云服务器进行操作了即使用指令 Centos系统sudo yum install git Ubuntu系统sudo apt install git -y
注意使用普通账户安装需要进行提权。
安装完后使用指令git --version查看下载版本若出现版本号即安装成功 注我这里使用的是Centos 7.x系统。
git的基础操作
前面讲的大部分内容都是围绕着git的由来和介绍以及gitee和github平台的介绍。这个部分我们会讲解一些操作。
当前还是有必要把在Linux上写的代码提交到gitee上的因为后期会更换Ubuntu系统有了这个远端仓库进行同步存储这样子就可与很轻松的把写过的代码全部传到新系统了。
克隆仓库
我们就以刚刚在gitee上建立的仓库myTest进行测试。 按照刚刚的配置创建好后会发现昵称旁边会出现一个”initial commit“这是记录着我们第一次创建仓库的记录。那个地方其实是显示我们最近一次提交到远端仓库的备注的。
然后我们发现里面有三个文件。其中.gitignore是一个忽略管理文件的配置文件。这个我们先不管等下再做。我们就知道当前我们只能提交一些没有被忽略的文件即可。 还有两个README文件可以理解为这个仓库的介绍。可以自己填写。这里就先不写了。
我们现在只是在远端上开了一个仓库没办法在本地仓库之间进行互联。所以我们需要进行一个操作即克隆仓库。把这个远端的仓库克隆到本地去即可 使用指令git clone URL其中URL是仓库链接。
点击当前界面右上角”克隆/下载“ URL就是第一个方框内的链接。这里有很多种协议当前选择HTTPS即可。我们复制该连链接在我们当前的机器下使用克隆指令(Windows下不演示) 我们会发现当前工作目录下出现了一个叫做my-test的文件夹这个其实就是我们克隆到本地的远程仓库(也叫工作区)。这个仓库和远程的是一模一样的 只不过存在了一个隐藏文件.git。
查看.gitignore
我们使用vim打开该文件查看 这个文件的其实就是个配置文件只要在该工作区下的文件有出现上面的后缀就不会被管理这个就不演示了。我们可以添加几个文件后缀进去 比如编译时产生的中间文件我们不想提交也加进去。
git三板斧
我们接下里讲介绍使用git的三板斧。有了这三板斧就可以很轻松的实现远端仓库和本地仓库之间的互相管理了。
将文件添加到暂存区
首先我们使用指令git add (文件名)可以把指定的文件提交到文件的暂存区。 (如果不写文件名会把所有未add的文件都给添加到暂存区) 但是如果是比较新的版本的git可能不支持该操作(git add)可能需要使用git add -a / git add .才能把所有未add的文件添加。
为什么是暂存区呢 其实是因为.git这个文件夹内部结构导致的。其内部有个暂存区。被add的文件先会被放在暂存区内。等到用户使用提交到git仓库指令后再一次性提交到git仓库。这样可以极大地提高效率(如果add一次就提交一次是很浪费时间和资源的有太多IO操作)。
还需要注意的是管理文件的时候被管理文件一定要在工作区内也就是和.git同一级的目录下要不然会报错。 我这里随便创建一个文件 并且将所有的翻译过的中间文件生成我们现在试着提交到本地仓库去看看是否会忽略掉了一些指定忽略的文件。
提交到本地仓库(处理第一次提交问题)
我们需要使用指令git commit -m “提交的备注”进行提交到本地仓库。 注意这个备注尽量别乱写养成一个好习惯。 这里突然不给提交出现了两行要我们Run的指令 git config --global user.email “youexample.com” git config --global user.name “Your Name”
这个意思其实就是要我们填写一下我们要提交到的远程仓库(这里是从gitee复制过来的链接)的我们在该平台上注册的账户名和邮箱。一定要和当时写的一模一样否则提交代码到gitee上后不会显示有提交记录(也就是个人主页中的小绿点)。
我们只要配置好对应的邮箱和账户名即可。
然后重新add一下和commit一下即可我们发现只添加了一个HelloWorld.c。
将文件推送至远端仓库(同步两端仓库)
然后我们现在只是完成了本地仓库的管理。我们还需要把刚刚添加到本地仓库的文件推送到远端仓库使用git push仓库即可会把所有本地仓库中没有被推送到远端的文件推送过去 这里会要我们输入我们gitee账户的账户名和密码。这个可以自行配置一下不用输入这里就不演示了。然后我们刷新一下我们对应的gitee仓库看看
确实提交上来了而且只有.c文件说明确实很多文件被过滤了。 而且用户名和邮箱配置正确的话在个人主页处往下拉可以看见今日提交记录会变成绿色。
至此就讲完了git的三板斧操作了。当然比如像取消add指令这样的操作还没有讲这个可以上网查一下。在这里就先不说了。
部分查看指令
这个部分简单了解一下就可以了。后面的文章再来细说。
查看过往提交记录
我们可以使用指令git log查看过往的提交记录里面清清楚楚的展现了每一次提交的唯一编码(commit后面的码)用户、邮箱、日期、时间、以及相关备注。 我们也可以配合Linux的一些指令比如grep根据关键词找到想要的提交记录
查看仓库状态
我们现在新建三个文件h1.txt h2.txt h3.txt不进行add。
我们使用指令git status查看当前仓库状态 git会告诉我们哪些文件是Untracked的(未add的)哪些是修改了但是还没被提交的比如图中提到的.gitignore。 我们试着把三个文件add一下 这个时候Untracked的文件就没有了也就是现在所有的文件都已经被放入暂存区了(注意提交过的不需要再add如果修改了就重新commit就好)。
所以这个指令是用来查看当前仓库状态的。
其它的指令就先不讲当前能够学会基础的三板斧即可。至于很多内容其实可以到gitee上查看git有的功能那里都有还都是图形化界面。
更新仓库
这里我们还有提及一个问题那就是多用户操作一个仓库的时候。 这里我就在Windows下和Linux下一起操作进行演示。 现在我们成功的把仓库克隆到Windows系统的某个路径下了我们来添加一些文件 我们添加了一个h4.txt内容就是自己的名字。
我们试着提交 成功了出现了一些乱码但是不要紧这不是重点。 我们发现gitee上是成功的推送来了。但是这个仓库在Linux账户下也有很有可能我并不知道当前已经有其它的用户更新过仓库了假设我当前就是不知道我们来试试看 直接就报错了(rejected!)。这就是因为我当前不知道仓库已经被更新过了。我们知道远端上的仓库一定是最新的版本。而且现在远端仓库是被修改的如果我就这么提交了那么这不就错乱了吗到底选择哪个作为最新版本呢而git管理的仓库必须是一个版本一个版本递进更新的。所以这时候我们应该先更新一下当前仓库
使用指令git pull即可把远端仓库和当前仓库合并(使用该指令后页面会跳转到一个vim界面不要管直接退出即可)。 这个时候就发现仓库确实给合并了。
我们再试着提交 这时候就会发现成功了。
所以这也就告诉我们如果是多人使用的一个远端仓库每次使用前应当同步一下两端的仓库。因为很可能会出现没办法提交的情况