Git教程(一)----初识Git

Git是什么?
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git有什么特点?简单来说就是:高端大气上档次!
那什么是版本控制系统?

版本控制系统



我们在开发一个项目的时候,肯定有这样的经历:

1)想添加一些功能,但是又怕修改后的代码出现致命的BUG,这时候想要从头修改的时候却苦于找不到原来版本的源代码。
2)想用另一种方法实现原来的功能,但是在文件中修改却越来越乱。
为了解决这些问题,好多稳健的程序员为这样做,在自己的桌面上,每次修改都进行一个备份,为他们命名为不同的名称

于是我们的文件会变成这样

亦或是更糟

更关键的是,我们第2天醒来,再回到我们的项目中,忽然觉得以前某一个的修改是毫无意义的,我们想要回到那个修改之前,但是最大的BUG在于——已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。

看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。

还有一个要命的问题在于,有些部分代码BUG实在让你头疼,于是你传了一份给公司的”大神”帮助修改,于是你把代码Copy到U盘里给他/她(也可能通过Email发送一份给他/她),然后,当然你也没闲着,你继续修改你的代码。然后一天后,大神把代码传给你,此时,你必须想想,发给他/她之后到你收到他/她这段时间,你作了哪些改动,而大神又做了那些修改,得把你的改动和大神的部分合并,好吧,那个文件里有,这个……好吧(此处省略N光年),好吧终于改完了(咦,不对怎么还有…………TTTTTTTTTT)。

于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编写,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?

这个软件用起来就应该像这个样子,能记录每次文件的改动:

版本 用户 说明 日期
0.7.0 gatieme 跳过了预处理 2012-02-01
0.7.1 sole 加入了错误处理 2012-02-02
0.7.2 princess 优化了处理函数 2012-02-03
0.7.3 gatieme 更改了预处理 2012-02-04

这样我们就其实在是使用一个版本控制系统。

Git简介


参考:



http://www.jianshu.com/p/ee89f9385ca4
http://git-scm.com/book/zh/ch1-2.html

git时间简史



2005年4月3日开始开发git
2005年4月6日项目发布
2005年4月7日Git开始作为自身的版本控制工具
2005年4月18日发生第一个多分支合并
2005年4月29日Git的性能达到Linux预期

Git的诞生



2005年7月26日Linux功成身退,将Git维护权交给Git另一个主要贡献者Junio C Hamano,直到现在

很多人都知道,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)制订了若干目标:
1)速度
2)简单的设计
3)对非线性开发模式的强力支持(允许上千个并行开发的分支)
4)完全分布式
4)有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,它还有着令人难以置信的非线性分支管理系统,可以应付各种复杂的项目开发需求。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

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

转载:http://blog.csdn.net/gatieme/article/details/43792589

时间: 2024-11-10 00:54:36

Git教程(一)----初识Git的相关文章

《走进git时代系列二》 从SVN迁移到GIT教程

本篇文章是走进git时代系列之二,如何迁移到GIT的教程, 不了解GIT的同学可以先看系列一<走进git时代系列一> 你该怎么玩? 本文分为以下几部分内容: SVN 迁移到 Git 的简单原理 图文教程从TaoCode SVN 迁移到 YunCode Git 如何混用SVN+GIT SVN 迁移到 Git 的简单原理 本文所涉及的工具只有一个 git-svn , 包含在1.7.1以上的git客户端版本内, 该工具详细介绍见: https://www.kernel.org/pub/softwar

Git@OSC代码托管(含Git教程!important非命令行)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 背景:鉴于小宝鸽对Git的了解不是很深,因此本篇文章仅作入门参考.因为以前一直都是使用SVN.但是发现SVN,很少网上代码托管服务.而Git确是有不少,有些时候,你几个好友想开发一个项目,但是又没有不在同一个局域内网,因此代码可以托管到网上.重点是githug那么火猿友们应该是知道的. 本篇文章粗略讲解下使用Git将代码托管到https://git.oschina.net/

Git 教程简单入门介绍_其它综合

许多人认为Git太混乱,或认为它是一种复杂的版本控制系统,其实不然,这篇文章有助于大家快速上手使用Git. 入门 使用Git前,需要先建立一个仓库(repository).您可以使用一个已经存在的目录作为Git仓库或创建一个空目录. 使用您当前目录作为Git仓库,我们只需使它初始化. git init 使用我们指定目录作为Git仓库. git init newrepo 从现在开始,我们将假设您在Git仓库根目录下,除非另有说明. 添加新文件 我们有一个仓库,但什么也没有,可以使用add命令添加文

Git 教程之远程仓库详解_相关技巧

Git 远程仓库 Git 并不像 SVN 那样有个中心服务器. 目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作. 你就需要将数据放到一台其他开发人员能够连接的服务器上. 本例使用了 Github 作为远程仓库,你可以先阅读我们的 Github 简明教程. 添加远程库 要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下: git remote add [shortname] [url] 本例以Github为例作为远程仓

Git Rebase教程: 用Git Rebase让时光倒流

Git Rebase教程: 用Git Rebase让时光倒流 想象一下你正在开发一个激进的新功能.这将是很灿烂的但它需要一段时间.您这几天也许是几个星期一直在做这个. 你的功能分支已经超前master有6个提交了.你是一个优秀的开发人员并做了有意义的语义提交.但有一件事情:你开始慢慢意识到,这个疯狂的东西仍需要更多的时间才能真的做好准备被合并回主分支. m1-m2-m3-m4 (master) \ f1-f2-f3-f4-f5-f6(feature) 你也知道的是,一些地方实际上是交叉不大的新功

Git 教程之基本操作详解_相关技巧

Git 基本操作 Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比.本章将对有关创建与提交你的项目快照的命令作介绍. 获取与创建项目命令 git init 用 git init 在目录中创建新的 Git 仓库. 你可以在任何时候.任何目录中这么做,完全是本地化的. 在目录中执行 git init,就可以创建一个 Git 仓库了.比如我们创建 runoob 项目: $ mkdir runoob $ cd runoob/ $ git init Initialized empty Git

Git 教程之标签详解_相关技巧

Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 w3cschoolcc 项目发布一个"1.0"版本. 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)"v1.0"的标签. -a 选项意为"创建一个带注解的标签". 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解. 我推荐一直创

git教程(三)--创建项目并提交更新

我们使用git就是为了更方便的管理我们的项目,更好的进行版本控制. 那么首先我们就要有一个项目,在github上如何创建项目呢? 如何创建项目 登陆你的Github账户,点击上方导航栏的"+"按钮,在下方选择"New repository" Github如何创建项目仓库 进入到创建项目页面,按照下图所示输入你要创建项目的信息 Github如何创建项目仓库 最后点击"create repositoty",就会跳转到你创建项目的页面了,至此你的项目仓

Git 教程之创建仓库详解_相关技巧

Git 创建仓库 本章节我们将为大家介绍如何创建一个 Git 仓库. 你可以使用一个已经存在的目录作为Git仓库. git init Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令. 在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓