本文共 3393 字,大约阅读时间需要 11 分钟。
很多人都知道,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是分布式的版本管理。 集中式版本控制:git的安装比较简单,无脑下一步就行了,这里就不赘述。安装完后你会看到三个git相关的可执行文件:
$ 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配置的选项下即可。
使用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
后面补充
转载地址:http://zhntb.baihongyu.com/