Git简介以及与SVN的区别

Git是由著名Linux内核(Kernel)开发者LinusTorvalds为了便利维护Linux而开发的。

Git是一个分布式的版本控制系统。作为一个分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。

在windows下使用git,如果对命令不熟悉,可以使用tortoisegit. tortoisegit依赖于msysgit.

在git中,每个本地的代码库都是一个完整的git系统。使用tortoisegit提交代码(commit),其实只是提交到本地的git版本库。更新本地版本库后,就可以将其推送(push)到远程版本库,合并到master或者其它分支。

Github是一个网站,同时也是一个项目仓库,能让多名开发人员很方便地进行协同软件开发。

在Windows下安装Git步骤

1.  从 http://download.tortoisegit.org/tgit/1.8.12.0/下载最新的TortoiseGit-1.8.12.0-64bit.msi;

2.  从 http://msysgit.github.io/ 下载Git-1.9.4-preview20140929.exe;

3.  先安装Git-1.9.4-preview20140929.exe,然后再安装TortoiseGit-1.8.12.0-64bit.msi,按默认设置即可,重启电脑;

4.  鼠标右键-->TortoiseGit-->Settings-->General-->Version,点击Check now,如果显示gitversion 1.9.4.msysgit.2说明配置成功;

5.  如果从网上下载相关代码,选择Git clone, 弹出Git clone对话框,在URL中输入地址即可,如果需要用户名和密码,还会弹出输入用户名和密码的对话框,然后点击OK,即可将源码下载到本地。

tortoisegit的一些常见用法

1.      Git Clone… :克隆一个项目代码库到本地(对应于svn的checkout);

2.      Git Create repository here… :git在这里创建新版本,建立git项目(Init);

3.      Git Sync… : 用于同步两个版本库;

4.      TortoiseGit-->Pull : 将远程版本库拉到本地版本库;

5.      TortoiseGit-->Push: 将本地版本库推送到远程版本库;

6.      Git Commit->”master”… :提交到本地版本库,成功后弹出对话框可以推送到远程版本库。

Git和SVN之间的区别

1.      Git是分布式的,SVN不是,SVN是集中式:分布式模式,就是每个开发人员从中心版本库/服务器上check out代码后会在自己的机器上克隆一个自己的版本库。在一个不能连接网络的地方时,仍然能够提交文件,查看历史版本记录,创建项目分支等。集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人员都通过客户端连到这台服务器,取出最新的文件或者提交更新。SVN特点:(1).每个版本库有唯一的URL,每个用户都从这个地址获取代码和数据;(2).获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;(3).提交必须有网络连接(非本地版本库);(4).提交需要授权,如果没有写权限,提交会失败;(5).提交并非每次都能成功。与SVN不同,Git记录版本历史只关心文件数据的整体是否发生变化。Git并不保存文件内容前后变化的差异数据。在分布式版本控制系统中,客户端并不只是提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。因为Git在本地磁盘上就保存着所有有关当前项目的历史更新,并且Git中的绝大多数操作都只需要访问本地文件和资源,不用连网,所以处理起来速度飞快。Git特点:(1).Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人;(2).Git的每一次提取操作,实际上都是一次对代码仓库的完整备份;(3).提交完全在本地完成,无须别人给你授权,你的版本库你做主,并且提交总是会成功;(4).甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支;(5).Git的提交不会被打断,合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示你手工完成;(6).Git也可以模拟集中式的工作模式。

2.      SVN的工作区和版本库是截然分开的,而Git的工作区和版本库是如影随形的:SVN的版本库和工作区是存储在不同的路径下,一般是在不同的主机中。SVN的企业级部署中,版本库在服务器上,只能通过https,http,svn等协议访问,而不能直接被用户接触到。SVN的工作区是一份版本库在某个历史状态下的快照。Git的版本库和工作区在同一个目录下,工作区的根目录有一个.git的子目录。这个名为.git的目录就是版本库本身,它是Git用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。Git版本库可以脱离工作区而存在,但是工作区不能脱离版本库而存在,即工作区的根目录下必须有一个名为.git的版本库克隆文件。

3.      Git把内容按元数据方式存储,而svn是按文件:.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上的所有的东西,例如标签、分支、版本记录等。

4.      版本号:Git没有一个全局的版本号,而SVN有。SVN每一次提交都具有整个版本库全局唯一的版本号。Git的版本号则更进一步,版本号是全球唯一的。SVN的版本号是连续的版本号,每一次新的提交都会版本号+1. Git对于每一次提交,通过对文件的内容或目录的结构计算出一个SHA-1哈希值,得到一个40位的十六进制字符串,Git将此字符串作为版本号。所有保存在Git数据库中数据都是用此哈希值作索引的,而不是靠文件名。使用哈希值作版本号的好处就是对于一个分布式的版本控制系统,每个人每次提交后形成的版本号都不会出现重复.另一好处是保证数据的完整性,因为哈希值是根据内容或目录结构计算出来的,所以还可以据此来判断数据内容是否被篡改.Git的版本号虽然不连续,但是是有线索的,即每一个版本都有对应的父版本(一个或者两个),进而可以形成一个复杂的提交链。

5.      Git的内容完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法,这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

6.      版本库(repository):SVN只能有一个指定中央版本库,当这个中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。而Git可以有无限个版本库,或者每一个Git都是一个版本库,区别是它们是否拥有活动目录。如果主要版本库发生了什么事,工作成员仍然可以在自己的本地版本库提交,等待主要版本库恢复即可。工作成员也可以提交到其它的版本库。

7.      重新设立起点(rebase):在Git,如果你想把别人的最新提交设立为现在这个分支的起点,只要执行git rebase branch_name即可。这个和合并(merge)不同的是,merge会依据修改的时间视为最新,而rebase会要求你去解决双方都有修改过的地方的矛盾(confict).

8.      系统档案:SVN会在每一个目录放一个.svn,如果想移除这些.svn是很累的(最新版本的svn只有在根目录有.svn,子目录没有了)。而Git会在目录起点拥有一个.git目录。

9.      Git是压缩后传输,svn是一个一个文件传输,所以git的网络流量比svn少很多。

10.  部分检出(checkout):SVN可以将整个库检出到工作区,也可以将某个目录检出到工作区。但是Git只能全部检出,不支持按照目录进行的部分检出。在SVN中,从仓库checkout的一个工作树,每个子目录下都维护着自己的.svn目录,记录着该目录中文件的修改情况以及和服务器端仓库的对应关系。Git没有部分检出,这并不是说只有将整个库克隆下来才能查看文件。

11.  更新:在SVN中,因为只有一个中心仓库,所以所谓的远程更新,也就是svn update,通过此命令来使工作区和版本库保持同步。Git使用git fetch和git pull来完成远程更新任务。fetch操作只是将远程数据库的object拷贝到本地,然后更新remotes head的refs,git pull的操作则是在git fetch的基础上对当前分支外加merge操作。

12.  提交(commit):在SVN,当你提交你的代码时,它将直接记录到中央版本库。当你发现你的代码存在严重问题时,你已经无法阻止事情的发生。如果网络中断,你根本没办法提交。对于SVN来说,所有的commit操作都可以认为是对远程仓库的更新动作。在工作区中对文件进行添加(add)、修改、删除(delete)操作要同步到版本库,必须使用commit命令。而Git的提交完全属于本地版本库的活动。而你只需”推”(git push)到主要版本库即可。Git的”推”其实是在执行”同步”(Sync)。在Git中,要将一个文件纳入版本管理的范畴,首先是要用git add将文件纳入stage(暂存区域,介于workcopy和版本库head版本的一种中间状态)的监控范围,只有更新到stage中的内容才会在commit的时候被提交。Git的stage让你在提交的时候清楚的知道git将要提交哪些改动。

13.  分支(branch):在SVN,分支是一个完整的目录,且这个目录拥有完整的实际文件。而Git,每个工作成员可以任意在自己的本地版本库开启无线个分支。Git的分支相当简单,你可以从同一个工作目录下快速的在几个分支间切换,很容易发现未被合并的分支,能简单而快捷的合并这些文件。Git中的分支实际上仅是一个包含所指对象校验和(40个字符长度SHA-1哈希值)的文件,新建一个分支就是向一个文件写入41个字节(版本号加一个换行符),自然速度很快。Git的实现与项目负责度无关,它永远可以在几毫秒的时间内完成分支的创建和切换。Git的分支是完全隔离的,而SVN则没有。Git的里程碑是只读的,Git完全遵守历史不可更改这一时空法则。用户不能向git的里程碑中提交,否则里程碑就不是标记,而成了一个分支。SVN中提供了一个功能switch,使用switch可以在同一个工作树上,在不同的分支中进行切换。Git在分支中进行切换使用的命令是checkout.

14.  优缺点:SVN优点:(1)、管理方便、逻辑明确,符号一般人思维习惯;(2)、易于管理,集中式服务器更能保证安全性;(3)、代码一致性非常高;(4)、适合开发人数不多的项目开发。SVN缺点:(1)、服务器压力太大,数据库容量暴增;(2)、如果不能连接到服务器上,基本上不可以工作,就不能提交、还原、对比等等;(3)、不适合开源开发,但是一般集中式管理的有非常明确的权限管理机制,可以实现分层管理,从而很好的解决开发人数众多的问题。Git优点:(1)、适合分布式开发,强调个体;(2)、公共服务器压力和数据量都不会太大;(3)、速度快、灵活;(4)、任意两个开发者之间可以很容易的解决冲突;(5)、离线工作。Git缺点:(1)、学习周期相对而言比较长;(2)、不符合常规思维;(3)、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

参考文献:

1.      http://www.vaikan.com/5-fundamental-differences-between-git-svn/

2.http://wenku.baidu.com/link?url=gc9leYhGnsMWhXz2r25yCnsKMdAAmEW5p7YH6ems_1VPstXkbLe08qfc0EpT2vo71QAc_-jBLxfDC55VGkKUJw-iuS6_lJYS2X2yHXr1HXS

时间: 2024-10-10 07:59:53

Git简介以及与SVN的区别的相关文章

git和svn的区别

一.git和svn的区别 1.Git是分布式的,SVN是集中式的,好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交.合并,也可以不用联网在本地提交:话说回来Git跟Svn一样有自己的集中式版本库和Server端,但Git更倾向于分布式开发,因为每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端. 从上面看GIt真的很棒,但是GIt a

git 与 svn 的区别

首先介绍下什么是git 和 svn GIT (分布式版本控制系统) Git(读音为/g?t/.)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversio

Git Step by Step – (1) Git 简介

由于工作的需要,代码版本控制工具要从Perforce换成Git.说实话,刚开始真的很不适应,要从一个可以很好的支持用户界面的工具转到一个命令行工具,而且Git中有几百个命令,一下子就傻眼了. 但是经过一段时间的使用和熟悉,已经慢慢适应了.所有准备一个整理一个Git使用系列,是对自己使用Git的一个总结,也希望可以对同样刚开始使用Git的同学一些帮助.下面就开始探索Git了. Git简介 Git是Linus用C实现的一个分布式版本控制工具,注意这里对分布式的强调.不同于Git,像Perforce.

Git简介【转】

本文转载自:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 Git简介 Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 那什么是版本控制系统? 如果你用Microsoft Word写过长篇大论,那你一定有这样的经历: 想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新

一、Git简介

由于工作需要,代码版本控制工具由SVN换为了Git.Git对于我来说,很陌生,不清楚其工作原理,所以查询了一些资料,将自己所得知的内容来汇总一下,梳理一下这方面的知识,同时也给其他想了解Git的童鞋们,提供点参考资料!! 了解软件,我们一般都了解其来源.优缺点(或与其他系统的比较).安装配置.软件的架构,工作原理和使用,对于Git来说也是一样,这里也就这几个方面来说! 版本控制工具简介 问题的发现与解决永远是我们软件行业前进的动力与根源! 说到版本控制工具,不得不说,我们为什么需要它,也就是我们

Git 简介、下载安装、配置

Git简介 Git 是一个开源的分布式版本控制系统,与SVN不同,Git采用了分布式版本库的方式,不需要服务器端软件的支持. Git 与 SVN的区别 Git 是分布式的,SVN 不是,这是 Git .SVN最核心的区别. Git 将内容按元数据方式存储,而 SVN 是按文件,SVN把文件的元信息隐藏在一个 .svn文件夹里. Git .SVN 中分支的概念不同 Git 没有一个全局的版本号, SVN 有 Git 的内容完整性要优于 SVN.Git 的内容存储使用的是 SHA-1 哈希算法,能确

Git学习:版本控制、Git简介与安装

1.什么是版本控制(Version Control) 2.Git简介 3.Git的安装 3.1 Linux环境下安装Git 3.2 Windows环境下安装Git 1.什么是版本控制(Version Control) 如果你长期使用过某个软件,或者长期玩过某款游戏,那你就应该听说过“版本”一词,甚至遇到过软件版本的更新,比如腾讯QQ最新版是9.1.6版本,英雄联盟最新版是9.14版本.从用户的角度来说,软件的版本往往是越新越好,因为越新的版本一般意味着更多的功能.更好的界面以及更少的BUG.但是

git简介,及协作开发

git 简介 """什么是git:版本控制器 - 控制的对象是开发的项目代码代码开发时间轴:需求1 > 版本库1 > 需求2 > 版本库2 > 版本库1 > 版本库2 """ git与svn比较 git的工作流程 git分支管理 git使用 安装 # 1.下载对应版本:https://git-scm.com/download # 2.安装git:在选取安装路径的下一步选取 Use a TrueType font in

常用代码管理工具,如git、hg、svn

常用代码管理工具,如git.hg.svn: