Git简介以及与SVN的区别
Git是由著名Linux内核(Kernel)开发者Linus Torvalds为了便利维护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)、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
参考文献:百度文库
相关文章:

java集合中某一个元素出现的次数
int count Collections.frequency(list, key); java的内置方法转载于:https://www.cnblogs.com/wysAC666/p/10252676.html

加密解密-DES算法和RSA算法
昨天忽然对加密解密有了兴趣,今天上班查找了一些资料,现在就整理一下吧:) 一.DES算法 这种算法如图所示,这里将描述它的每一个步骤。这个算法进行了16次迭代(圈),把各块明文交织起来…

开始Dojo之路
开始Dojo之路waiting……转载于:https://blog.51cto.com/frabbit2013/1242108

图像相似度计算之直方图方法OpenCV实现
操作步骤: 1. 载入图像(灰度图或者彩色图),并使其大小一致; 2. 若为彩色图,增进行颜色空间变换,从RGB转换到HSV,若为灰度图则无需变换; 3. 若为灰度图,直接计算其直方…

黄皓之后,计算机科学上帝Don Knuth仅用一页纸证明布尔函数敏感度猜想
作者 | Freesia编辑 | 夕颜出品 | AI科技大本营(ID:rgznai100)导读:近日,美国艾默里大学计算机与数学科学系教授黄皓(Hao Huang)用一篇短短 6 页的论文证明了布尔函数,引发了计算机和数学领域社…

数位DP 不断学习中。。。。
1, HDU 2089 不要62 :http://acm.hdu.edu.cn/showproblem.php?pid2089 题意:不能出现4,或者相邻的62, dp[i][0],表示不存在不吉利数字 dp[i][1],表示不存在不吉利数字,且最高位为2 dp[i][2],表示存在不吉利数字 #i…

linux 性能 管理 与 优化
一、影响Linux服务器性能的因素操作系统级:CPU、内存、磁盘I/O带宽、网络I/O带宽程序应用级二、系统性能评估影响性能因素 评判标准 好 坏 糟糕 CPU user% sys%< 70% user% sys% 85% user% sys% >90% 内存 Swap In(si&…
对称加密算法之DES介绍
DES(Data Encryption Standard)是分组对称密码算法。DES采用了64位的分组长度和56位的密钥长度,它将64位的输入经过一系列变换得到64位的输出。解密则使用了相同的步骤和相同的密钥。DES的密钥长度为64位,由于第n*8(n1,2,…8)是校验位,因此实…

200行代码解读TDEngine背后的定时器
作者 | beyondma来源 | CSDN博客导读:最近几周,本文作者几篇有关陶建辉老师最新的创业项目-TdEngine代码解读文章出人意料地引起了巨大的反响,原以为C语言已经是昨日黄花,不过从读者的留言来看,C语言还是老当益壮&…

fastJson结合Nutz.Mapl的进阶应用
为什么80%的码农都做不了架构师?>>> 今天要做一堆数据的序列化, 反序列化, 序列化没问题, 反序列化却遇到了点小意外, 这一堆数据不是一个类!!!!!!当然可以通过类内部的一个类型对象来判断, 但是fastJson并没有这个功能, 只能自己一个一个的遍历一个一个…

OpenCV实现遍历文件夹下所有文件
OpenCV中有实现遍历文件夹下所有文件的类Directory,它里面包括3个成员函数:(1)、GetListFiles:遍历指定文件夹下的所有文件,不包括指定文件夹内的文件夹;(2)、GetListFolders:遍历指定文件夹下的所有文件夹…

阿里、京东、快手、华为......他们是如何构建一个个推荐系统“帝国”的?
推荐系统在人们的日常生活中随处可见,成为我们生命中不可或缺的一部分。作为当今应用最为广泛和成熟的 AI 技术之一,它是信息生产者、传播者与用户之间的桥梁,可以让信息最精准、最高效地到达需求不一的用户面前。每天打开手机或电脑端的大部…

前端基础_ES6
声明 三大关键字声明变量:var (ES5语法) let (ES6语法)声明常量:const (ES6语法) var 声明变量特性1、支持 函数作用域2、支持 JS预解析 (所谓变量提升)3、支持 重复声明 ÿ…

5大典型模型测试单机训练速度超对标框架,飞桨如何做到?
导读:飞桨(PaddlePaddle)致力于让深度学习技术的创新与应用更简单。在单机训练速度方面,通过高并行、低开销的异步执行策略和高效率的核心算子,优化静态图训练性能,在Paddle Fluid v1.5.0的基准测试中&…

windowsXP用户被禁用导致不能网站登录
1、查看系统事件,发现弹出如下的错误 2、根据上面的错误,我们很容易就可以判断是禁用了账户引起的 2.1后面进入计算机管理,再进入用户管理 2.2双击点开Internet来宾用于,发现此用户已经停用了。 2.3双击点开与IIS访问有关用户&…

从头到尾使用Geth的说明-3-geth参数说明和环境配置
1.参数说明 ETHEREUM选项:--config value TOML 配置文件--datadir "/home/user4/.ethereum" 数据库和keystore密钥的数据目录--keystore keystore存放目录(默认在datadir内)--nousb …

OpenSSL中对称加密算法DES常用函数使用举例
主要包括3个文件: 1. cryptotest.h:#ifndef _CRYPTOTEST_H_ #define _CRYPTOTEST_H_#include <string>using namespace std;typedef enum {GENERAL 0,ECB,CBC,CFB,OFB,TRIPLE_ECB,TRIPLE_CBC }CRYPTO_MODE;string DES_Encrypt(const string cleartext, const…

从原理到落地,七大维度读懂协同过滤推荐算法
作者丨gongyouliu来源 | 大数据与人工智能导语:本文会从协同过滤思想简介、协同过滤算法原理介绍、离线协同过滤算法的工程实现、近实时协同过滤算法的工程实现、协同过滤算法应用场景、协同过滤算法的优缺点、协同过滤算法落地需要关注的几个问题等7个方面来讲述。…

sql查询语句优化需要注意的几点
为了获得稳定的执行性能,SQL语句越简单越好。对复杂的SQL语句,要设法对之进行简化。 常见的简化规则如下: 1)不要有超过5个以上的表连接(JOIN) 2)考虑使用临时表或表变量存放中间结果。 3&#…

决策树算法原理(ID3,C4.5)
决策树算法原理(CART分类树) CART回归树 决策树的剪枝 决策树可以作为分类算法,也可以作为回归算法,同时特别适合集成学习比如随机森林。 1. 决策树ID3算法的信息论基础 1970年昆兰找到了用信息论中的熵来度量决策树的决策选择过程,昆兰把这…

对称加密算法之RC4介绍及OpenSSL中RC4常用函数使用举例
RC4是一种对称密码算法,它属于对称密码算法中的序列密码(streamcipher,也称为流密码),它是可变密钥长度,面向字节操作的流密码。 RC4是流密码streamcipher中的一种,为序列密码。RC4加密算法是Ron Rivest在1987年设计出的密钥长度…

SpringMVC中实现的token,防表单重复提交
一:首先创建一个token处理类 ,这里的类名叫 TokenHandlerprivate static Logger logger Logger.getLogger(TokenHandler.class);static Map<String, String> springmvc_token new HashMap<String, String>();//生成一个唯一值的tokenSupp…

利用CxImage实现编解码Gif图像代码举例
Gif(Graphics Interchange Format,图形交换格式)是由CompuServe公司在1987年开发的图像文件格式,分为87a和89a两种版本。Gif是基于LZW算法的无损压缩算法。Gif图像是基于颜色表的,最多只支持8位(256色)。Gif减少了图像调色板中的色彩数量&…

SpringBoot b2b2c 多用户商城系统 ssm b2b2c
来源: SpringBoot b2b2c 多用户商城系统 ssm b2b2c用java实施的电子商务平台太少了,使用spring cloud技术构建的b2b2c电子商务平台更少,大型企业分布式互联网电子商务平台,推出PC微信APP云服务的云商平台系统,其中包括…

AI“生死”落地:谁有资格入选AI Top 30+案例?
2019 年,人工智能应用落地的重要性正在逐步得到验证,这是关乎企业生死攸关的一环。科技巨头、AI 独角兽还有起于草莽的创业公司在各领域进行着一场多方角斗。进行平台布局的科技巨头们,正在加快承载企业部署 AI 应用的步伐,曾经无…

liunx 下su 和sudo 的区别
一. 使用 su 命令临时切换用户身份1、su 的适用条件和威力su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用户没有这个权限,而这个权限恰恰由…
非对称加密算法之RSA介绍及OpenSSL中RSA常用函数使用举例
RSA算法,在1977年由Ron Rivest、Adi Shamirh和LenAdleman,在美国的麻省理工学院开发完成。这个算法的名字,来源于三位开发者的名字。RSA已经成为公钥数据加密标准。 RSA属于公开密钥密码体制。公开密钥体制就是产生两把密钥,一把…

依图科技CEO朱珑:“智能密度”对AI发展意味着什么?
8月9日,由中央网信办、工业和信息化部、公安部联合指导,厦门市政府主办的“中国人工智能峰会”于厦门召开。中国工程院院士、北京大学教授高文,依图科技创始人兼CEO朱珑博士等出席峰会并发表了主题演讲。当前,人工智能正在扮演越来…

Office 2016使用NTKO OFFICE控件提示“文件存取错误”的解决办法
2019独角兽企业重金招聘Python工程师标准>>> 之前使用NTKO,电脑安装的说OFFICE2007,但是前2天电脑固态硬盘坏了 ,重新安装了系统,安装的说win10和office2016,再访问网站使用ntko时,却提示“文件存取错误”&…
如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4
在第一篇《如何使用CCRenderTexture创建动态纹理》基础上,增加创建动态山丘,原文《How To Create A Game Like Tiny Wings with Cocos2D 2.X Part 1》,在这里继续以Cocos2d-x进行实现。有关源码、资源等在文章下面给出了地址。 步骤如下&…