博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Git的一点思考
阅读量:2360 次
发布时间:2019-05-10

本文共 3393 字,大约阅读时间需要 11 分钟。

GIT历史

很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

版本管理工具比较

SVN与GIT的区别:

在公司工作时,往往都是多个同事同时做一个项目,每个人做个人模块的功能,代码往同一个代码库中提交,这时候就需要一个版本控制工具。
现在大多数的公司都会选择用git了,或者从svn往git去做迁移。svn和git到底有什么区别呢?本质区别就是SVN是集中式的版本管理,GIT是分布式的版本管理。
集中式版本控制:
在这里插入图片描述
分布式版本控制:
在这里插入图片描述
SVN采用这种集中式版本控制,只有一个中央仓库,成需要开发时,需要从远程仓库进行代码拉取,如果远程仓库所在的服务器宕机,或者断电,就会影响开发进度,另外SVN和GIT比,有一个明显的短板就是版本控制。而GIT采取的分布式的版本控制方式,每一个开发人员可以管理一个自己的本地仓库,在不联网时也可以不影响开发进度,不同的开发者提交代码时,会将提交记录提交到同一个分支的其他开发人员,方便分支管理。

GIT工作原理

在这里插入图片描述

解释一下Working Directory是你的工作区,stage相当于是一个暂存区,你需要将Working Directory下的文件,add到stage下,这样就可以被git管理。
用git commit提交到History,就是你的本地仓库。你可以在完全不联网的情况下完成开发任务,如果需要一个团队同时开发,这个时候就需要一个远程仓库,每个人从远程仓库上pull最新分支代码,或者把修改的代码push到远程仓库。常用的远程仓库有github,gitee,bitbucket等

GIT的安装

git的安装比较简单,无脑下一步就行了,这里就不赘述。安装完后你会看到三个git相关的可执行文件:

在这里插入图片描述

Git Bash,与Git CMD的区别是Git Bash是Linux下支持的命令,Git CMD则是Windows下支持的命令,命令会有区别,比如linux下清屏的命令是clear,而Windows下则是cls。我们常用的是Git Bash。注意Git GUI是图形化界面,不推荐初学者使用,初学者还是多使用Git Bash,多练习使用指令,达到熟练的程度。
这里说一下安装完记得要配置一下用户名和邮箱,这个是后面连接远程仓库的时候需要用到。
命令:

$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"

远程仓库配置

比较常用的代码托管平台就是github,但是由于服务器在国外,有时比较慢,甚至打不开。这里推荐gitee,也就是码云,国内做的比较好的代码托管平台。至于bitbucket我写在这里是因为现在的公司在用,过段时间我会更新一下bitbucket的使用感受和与github/gitee的区别。

配置:

需要在Git Bash 执行

$ ssh-keygen

会在C:\Users\xuzhenyu.ssh(这是我的目录)生成一个id_rsa.pub的公钥,复制公钥到gitee/github上的ssh配置的选项下即可。

在这里插入图片描述
github/bitbuket也是同理。

GIT的常用的一些命令

使用Git前,需要先建立一个仓库(repository)。您可以使用一个已经存在的目录作为Git仓库或创建一个空目录。

使用您当前目录作为Git仓库,我们只需使它初始化。

git init

使用我们指定目录作为Git仓库。

git init newrepo

从现在开始,我们将假设您在Git仓库根目录下,除非另有说明。

添加新文件

我们有一个仓库,但什么也没有,可以使用add命令添加文件。

git add filename

可以使用add… 继续添加任务文件。

提交版本

现在我们已经添加了这些文件,我们希望它们能够真正被保存在Git仓库。

为此,我们将它们提交到仓库。

git commit -m “Adding files”

如果您不使用-m,会出现编辑器来让你写自己的注释信息。

当我们修改了很多文件,而不想每一个都add,想commit自动来提交本地修改,我们可以使用-a标识。

git commit -a -m “Changed some files”

git commit 命令的-a选项可将所有被修改或者已删除的且已经被git管理的文档提交到仓库中。

千万注意,-a不会造成新文件被提交,只能修改。

发布版本

我们先从服务器克隆一个库并上传。

git clone ssh://example.com/~/www/project.git

现在我们修改之后可以进行推送到服务器。

git push ssh://example.com/~/www/project.git

取回更新
如果您已经按上面的进行push,下面命令表示,当前分支自动与唯一一个追踪分支进行合并。

git pull

从非默认位置更新到指定的url。

git pull http://git.example.com/project.git

已经超过了五分钟?
删除
如何你想从资源库中删除文件,我们使用rm。

git rm file

分支与合并
分支在本地完成,速度快。要创建一个新的分支,我们使用branch命令。

git branch test

branch命令不会将我们带入分支,只是创建一个新分支。所以我们使用checkout命令来更改分支。

git checkout test

第一个分支,或主分支,被称为"master"。

git checkout master

对其他分支的更改不会反映在主分支上。如果想将更改提交到主分支,则需切换回master分支,然后使用合并。

git checkout master

git merge test
如果您想删除分支,我们使用-d标识。

git branch -d test

GIT分支管理

后面补充

转载地址:http://zhntb.baihongyu.com/

你可能感兴趣的文章
毕业快两年了
查看>>
ROS学习笔记(1)
查看>>
lucene的中文分词器http://www.blogjava.net/dreamstone/archive/2007/06/22/125726.html
查看>>
ICTCLAS分词系统Java调用接口在Eclipse中的安装 http://blog.csdn.net/CloneIQ/archive/2006/07/20/945909.aspx
查看>>
在基于Struts构架的Java Web项目中加入ICTCLAS分词http://blog.csdn.net/CloneIQ/archive/2006/08/09/1043088.aspx
查看>>
QQ尾巴病毒的发送原理分析http://www.bitscn.com/hack/virus/200607/46309.html
查看>>
手把手教你把Vim改装成一个IDE编程环境(图文)http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx
查看>>
Skydrive 微软1G免费网盘申请
查看>>
什么是SEO http://www.seozone.net/search-engine-optimization/what-is-seo.html
查看>>
Closure http://www.martinfowler.com/bliki/Closure.html
查看>>
闭包(Closures)在各种语言中的例子 http://blog.csdn.net/ruby_cn/archive/2004/11/23/192588.aspx
查看>>
学做网页Applet录音机
查看>>
弹出run a dll as an app对话框&关机蓝屏的解决方法
查看>>
时空不是连续的
查看>>
勾股定理证明评监
查看>>
评测主流网站统计系统
查看>>
Jxta 命令 shell
查看>>
火页的窝--如何配置JXTA Shell(airclh)
查看>>
澳洲数学高手提速网络
查看>>
[图]跳过Windows,Phoenix开发内建在BIOS的小型操作系统
查看>>