Git版本控制

为什么要使用版本控制

如果你开发过项目,那你一定有过这样的经历,一种并不是那么好的体验(不能说很糟糕,但最起码不会很如意):想添加或修改一个功能,又怕将来新增或修改的代码会破坏原来的代码,因此,为了安全起见,你会ctrl+c和ctrl+v来进行备份,一段时间后,你会发现你的项目文件夹下有很多个版本,但是你又不记得哪个版本是哪个功能了,这个时候,你就会把这几个文件导入IDE中,然后运行查看相应的功能,直到找到你自己想要的版本,但是你又不敢把别的版本删掉,因为以后可能会用到。如果是多人合作开发,那么怎么同步代码呢,用qq传输?U盘复制?如果你们修改的是同一个文件,如何实现文件的同步呢?
这样是不是很糟糕,我们是高科技人才啊,要懂得合理利用时间,合理使用工具,这个时候我们的程序员就会想会不会由这样一个工具:不但可以帮我记录每次文件的改动,还可以让同事之间写作完成,而且又不影响各自的编码,这样自己就不会因为有一大堆的版本不知道如何进行选择了,这就是版本控制!

什么是版本控制

版本控制,故名知意,就是记录一个或若干个文件内容变化,以便将来查阅特定醒目版本的系统。

SVN与Git的最主要的区别?

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器那里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

在windows上如何安装Git?

点这儿,下载git,选择一个32位还是64位版本,进行下载。
这里写图片描述
我选择的是64-bit Git for Windows Setup的,下载完成后,是这样:
这里写图片描述
git的安装,就不描述了,基本就是一直下一步,然后自定义安装选择安装目录,安装好了后,进入cmd,输入git,如果出现如下提示“不是内部或外部命令,也不是可运行的程序“,那我们就需要配置环境变量了,假如git的安装路径是D:\Program Files\Git,这样配置环境变量:右键“计算机”->“属性”->“高级系统设置”->“环境变量”->在下方的“系统变量”中找到“path”->选中“path”并选择“编辑”->D:\Program Files\Git\bin路径复制到其中->保存并退出
注:“path”中,每个路径之间要以英文输入状态下的分号——“;”作为间隔。进入cmd,输入git,出现如下内容,表示环境变量配置成功。
这里写图片描述
接下来,在桌面空白处,鼠标右键,进入git bash.设置用户名和邮箱:git config –global user.name “xxxxx”回车,
git config –global user.email “xxxxx@xxx.com”,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。

几条必会命令行

什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。
所以创建一个版本库也非常简单,如下我是D盘根目录下新建一个testgit版本库。
这里写图片描述
cd表示进入某个目录,pwd 命令是用于显示当前的目录。

  1. 通过命令 git init 把这个目录变成git可以管理的仓库,如下:
    这里写图片描述
    这时候你当前testgit目录下会多了一个.git的目录(隐藏着的目录),这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。如下:
    这里写图片描述
    我在版本库testgit目录下新建一个记事本文件 readme.txt 内容如下:
    hello git !!!
    这里写图片描述
    关于vim的知识可以点这儿,在这里,我们只需要了解一些最基础的就行,vim文件名,如果没有该文件名,执行该命令就是新建,有的话就是编辑,然后输入hello git !!!,现在问题来了,怎么退出呢?别急,笔者当初也是不知道怎么退出,google一下,就啥都知道了,退出很简单,就这样,shift+”+“组合键,然后”:wq”就退出并保存了。cat命令是打开该文件,看见了没有,我输入的hello git 在窗口上显示出来了。

2.git status 命令用于检查本地项目的状态
这里写图片描述
下面有提示”git add” 命令的将一个或多个文件添加到git追踪列表中,只有通过”git add“添加了的文件才会被版本控制管理,可以添加单个文件就是”git add filename”,该目录下的文件全部添加到git追踪列表就是”git add .”,注意”.“前面有个空格,接下来我们再该目录下新建一个文件”hello.txt”,并随便输入内容
这里写图片描述
现在由两个txt文件了,输入 ”git status“,发现这两个txt文件都没添加
这里写图片描述
接下来,我们添加单个文件”git add hello.txt“,然后”git status“检查,发现确实是添加了”hello.txt”而”readme.txt“没有添加(绿色说明已经添加到git文件追踪列表,红色表示并没有添加到git文件追踪列表)
这里写图片描述
输入”git add .“发现刚刚那两个文件都变成了绿色,说明都已经添加了,
这里写图片描述
此时项目状态已经变成了staged(已暂存)状态,会在下次提交时被提交到本地代码仓库,注意”git add“命令并不是只提交一次就好了的,以后你每次更改过,都需要”git add“。
加入我们有一个并不需要追踪的文件被添加进去了怎么办,该怎么移除呢?从上面那个图可以看出,”git rm –cached“命令可以移除并不需要追踪的文件,不用担心,并不会将你的文件从本地项目中移除,只会从你的git追踪列表中移除,这样在提交中就不会包含被移除的文件
这里写图片描述

3.那么,我们已将文件添加到了git文件追踪列表里面了,该怎么提交到本地代码仓库进行版本控制呢?输入”git commit -m “xxxxx”“命令就可以提交了,然后我们查看状态,得到的结果是”nothing to commit,working directory clean“,我英语很烂,都能知道这句话的意思是”没有啥可以提交了,工作目录很干净“
这里写图片描述

4.你想知道你目前有几个版本了,该怎么查看呢?接下来就是”git log“出场了,该命令是用来查看项目历史纪录的
这里写图片描述
每一次提交都有四行东西,从上到下依次是:信息指纹,提交人,时间,提交信息,由于我们的项目就提交了一次,所以就输出了这次提交的信息

5.对于程序员来说,github应该是每天都会进去的网站,那我们该如何把别人托管在网站上的开源库下载到自己的计算机中呢?那就需要使用”git clone“命令了,该命令的作用就是将远程项目下载到本地,”git clone 远程仓库地址“这个地址有两个,一个是ssh地址,一个是网址,不过这两个都一样,对于使用”git clone“命令没啥区别,从github下载东西很慢,被墙了,但是我改过hosts了呀,至于为什么还是会很慢,我就不得而知了,clone完成后,你会发现当前目录下会多了一个文件夹,没错,就是刚刚你从开源库下载的项目,然后你就可以导进ID E为所欲为了。
这里写图片描述

6.不同分支 —-git branch
不知道大家发现了没有,在命令行的末尾总是会显示一个”master“,没错,就是它,这表示当前当前分支名,当我们初始化git后,默认会创建一个master分支,我们的操作也都是在该分支上进行的。不同分支的文件互不影响,因此,当我们需要开发一个新功能时,可以新建一个分支,并且切换到该分支进行开发,当该功能完成开发后,可以将该分支提交到本地,然后切换回主分支,并且合并完成新功能开发的分支,比如我们那个新功能开发没有实现,那也没什么事,直接在主分支尚把那个新功能的分支删掉就好了。
我们新建一个分支,dbconn数据库连接的分支”git branch dbconn“,并且进入该分支进行一系列的操作”git checkout dbconn“,然后输入”git branch“查看当前分支,有没有发现目前一共有两个分支”dbconn“和”master“,但是在”dbconn“前面有一个”“,没错,你猜对了,那个”“就是表示你当前在dbconn这个分之下,然后我们在该分支下面新建一个”conn.java“文件,并输入随便什么内容,最后提交,
这里写图片描述
在这里,其实checkout还有一个常用的功能就是将文件修复到之前的状态,就是刚刚你的”conn.java“是下面这样的,
这里写图片描述
经过你一天的奋战后,自己写的累死累活,但是就是没有把功能实现,而且你原来的代码也回不去了,代码过于混乱
这里写图片描述
使得原来的工作也不能用了,以前与今天的工作都白干了,此时我们应该快要抓狂了吧,如果你没有,恭喜你,说明你内心很强大哈,如何才能把该”conn.java“回到原来那个状态呢,”git checkout – 文件名“命令就可以帮你解决问题,继续提交。
这里写图片描述
看见没有,此时已经和我们原来的状态相同了,是不是应该”仰天长笑出门去,我辈岂是蓬篙人“,你就得瑟吧。
然后我们切换回主分支”git checkout master“,发现,在主分支下面并没有我们刚刚在dbconn分之下新建的”conn.java“文件,为什么呢?
这里写图片描述
看到这里你应该明白了git的厉害了吧,没错,因为我们刚刚在”dbconn“分支下做的改变并不会影响主分支,这也就说明,对于你没把握完成的功能可以新建一个分支,然后在该分支上面做改变,完全不用担心把自己原来的代码破坏了,是不是很方便,你也可以删除该分支
这里写图片描述
你的心中现在肯定有疑问,如果我在新分支上的功能实现那该怎么办?当然啊,那肯定有办法呀,不然要git有啥用,请往下面看!

7.合并分支 — git merge
当我们在”dbconn“分支上把我们要实现的功能都实现了,commit后,切换回主分支”git checkout master“,执行”git merge dbconn”命令,如果没有冲突(冲突下面会介绍)的话,那么master分支将会和dbconn分支合并,刚刚在dbconn上开发的功能也就合并到了master上面了,
这里写图片描述

8.解决冲突
上面说到了冲突,何为冲突呢?其实,在git merge命令时,如果没有冲突就会合并,否则将会提出哪些文件产生了冲突,你那么聪明,肯定已经想到了,为什么会发生冲突,开完成开发的时候,master主分支有个工具类文件,然后,有几个开发者分别在自己的分支上进行功能的开发时,可能会改那个工具类文件,而且这几个开发人员改的地方都相同,这就使得合并分支时git系统不知道是用谁的代码,此时就需要开发人员自己来进行比较,哪种方法好,只留下好的方法,不要的就删掉,并且把那些标识符都去掉,此时,冲突就已经被解决了,重新 git add 和commit提交代码即可。

9.给版本一个标签 —git tag
在所有功能实现,并且经过测试之后,我们第一件事就是给版本设置一个标签,这个是很重要的,方便日后的检查和维护,新建一个标签”git tag -a v1.0 -m “第一个版本””,通过“git tag”查看当前有几个标签
这里写图片描述
查看具体信息”git show 分支名“
这里写图片描述

10 帮助 git help
git 的帮助文档”git help 参数“(该参数是想要查询的git command 如add,init等等) 然后会打开一个html文件。

11 版本回退 git reset命令
现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,要使用什么命令呢?可以使用如下2种命令,第一种是:git reset –hard HEAD^ 那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset –hard HEAD~100 即可。
这里写图片描述
从图上可以看出,当前我们是处于第二次提交,信息为”conn.java完成“,通过”ls -al“命令看出,当前有conn.java文件,然后我们使用”git reset –hard HEAD^ “命令后,发现没有了conn.java文件,
现在我们也是出于信息为”第一次提交“的那次提交,
这里写图片描述
也可以”git reset –hard 版本号“回退,版本号也可以这样获得
这里写图片描述
假如我们又想恢复到刚刚退回来前的那个状态怎么bane,很简单,也和版本回退一样的”git reset –hard 版本号”,想回到那个版本就回到哪个版本。我现在出于最初的版本”第一次提交“的那个版本,并且我刚刚是从最新的版本”conn.java完成“这个版本会退回来的,对吧,
这里写图片描述
那么我怎么回到最新的”conn.java完成“这个版本呢?就这样
这里写图片描述

项目协作—–github

在了解之前,先注册github账号,由于你的本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要设置:第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:
ssh-keygen -t rsa –C “youremail@example.com”, 由于我本地此前运行过一次,所以本地有,如下所示:
这里写图片描述
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第二步:登录github,打开” settings”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容。
这里写图片描述
然后在git bash 里面输入”ssh -T git@github.com”命令测试是否添加成功,如果输出如下信息,那么则说明操作成功
这里写图片描述

1.如何添加远程库?
现在的情景是:我们已经在本地创建了一个Git仓库后,又想在github创建一个Git仓库,并且希望这两个仓库进行远程同步,这样github的仓库可以作为备份,又可以其他人通过该仓库来协作。
首先,登录github上,然后在右上角找到“create a new repo”创建一个新的仓库。如下:
这里写图片描述
点击按钮后,会出现如下页面
这里写图片描述
然后我们就把刚刚我们在本地代码库中保存的项目提交到远程代码库
下面用的是ssh提交,
这里写图片描述
提交成功后,可以看到github的testgit项目里已经有了刚刚提交的内容
这里写图片描述
下面我们把github里的testgit项目删掉,测试用http地址提交
在项目右上角有个Settings,进去后一直拖到最下面,有个”delete the repository“按钮,点击后,会弹出一个框框
这里写图片描述
就把该项目删掉了,现在重新新建testgit1,然后再用http地址来提交
同样,我们在本地,建一个testgit1项目(远程代码库和本地名字不一定要相同,不过一般相同的比较好记)下面我也是在e盘下面弄了个testgit1,然后新建了一个hello.txt文件,
这里写图片描述
接下来我们要remote了,然后push
这里写图片描述
注意,接下来变化不同了,push后,会弹出对话框,要我们输入github账号和密码,
这里写图片描述
这里写图片描述
这里写图片描述
ssh地址只要在git bash里面输入密码就ok了,而http地址却需要我们输入github的用户名和密码,为什么呢?你可能已经知道原因了,没错,你真是too clever,就是我们那个时候我们就已经把本地SSH Key和github关联上了。
在这里,我们就完成了把本地代码库和远程代码库同步起来了,哈哈哈,是不是很兴奋,有没有一点小成就感。

unconscious!I have writen this blog for about five hours,it is time to say goodbye!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
取消git版本控制的主要原因可能有以下几个方面。 首先,Git版本控制是一种非常强大且广泛使用的工具,它能够记录文件的修改历史、跟踪变更、实现分支管理等功能。取消Git版本控制将导致我们失去对项目代码的完整历史记录,无法追溯某个文件的修改来源,对于团队协作和代码维护都会造成极大的困扰。 其次,Git版本控制还提供了一种很方便的方式来协作开发。通过Git,我们可以轻松地与他人共享代码,并能够合并他们的修改。取消Git版本控制将使得协作开发变得更加困难,需要依赖传统的文件分享方式,对代码的修改追踪和合并将变得非常繁琐。 此外,Git版本控制还具有很高的可靠性和安全性。通过Git,我们可以轻松地恢复到某个具体的版本,即使在代码出现严重问题时也能够快速回滚。取消Git版本控制将意味着我们无法轻松地恢复到之前的某个版本,对于代码的修复和问题排查将变得困难和耗时。 最后,Git版本控制还为我们提供了一种有效的备份机制。通过Git,我们可以将代码存储在云端服务器或其他地方,以防止代码的丢失或硬件故障的影响。取消Git版本控制将导致我们无法轻松地备份和恢复代码,对于项目的稳定性和安全性将带来一定的风险。 综上所述,取消Git版本控制将给团队协作、代码维护、开发追踪、合并修改、代码修复、问题排查、备份等方面带来诸多不便和风险,因此不建议取消Git版本控制

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值