git与svn
来源:互联网 发布:吸入麻醉药的mac 编辑:程序博客网 时间:2024/06/05 23:49
1 Git简介
1.1 Git发展史
同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:
• 速度
• 简单的设计
• 对非线性开发模式的强力支持(允许上千个并行开发的分支)
• 完全分布式
• 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
因此,git诞生了。
1.2 其他版本控制工具
CVS
1、最早的开源、免费的集中式版本控制工具
2、自身设计有问题,会造成提交文件不完整,版本库莫名其妙损坏的情况
SVN
修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制工具
ClearCase
1、收费的集中式版本控制工具,安装比Windows还大,运行比蜗牛还慢
2、能用ClearCase的一般是世界500强,他们有个共同的特点是财大气粗或者人傻钱多
VSS
微软的集中式版本控制工具,集成在Visual Studio中
2 Git与SVN区别
2.1 使用上
l 检出代码:svn:checkout git:clone
l 更新代码:svn:update git:pull
l 提交代码:svn:commit git:push
2.2 本质上
2.2.1 SVN代码提交
Svn属于集中式版本管理控制系统,存在一个中央版本库,系统中保存了所有文件的修订版本,而协同工作人员通过连接svn服务器,提取出最新的文件,获取提交更新。
所有的客户端将自己的代码上传到中央服务器,中央服务器的版本库会保存上传的各个版本的代码,并进行统一管理。这里注意,客户端本身是不存在版本库的,所以,如果中央服务器离线或宕机,则集中式版本控制则无法使用。
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
SVN是一个增量式的版本控制,它不会将各个版本的副本都完整的保存下来,而只会记录下版本之间的差异,然后按照顺序更新或者恢复特定版本的数据。这使得服务端的存储量会非常低。
综上,SVN的特点:
1、存在服务器单点故障;
2、Check out代码,会将不同版本差异的代码最后综合到一起(V1+V2+V3+…Vn),该过程需要SVN需要计算,因此会增加服务器资源消耗(牺牲CPU开销,节省存储空间);
3、如果不是在局域网内,协同开发时需要联网;
4、SVN记录修改变化;
2.2.2 Git代码提交
Git记录整体变化:Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接
这是 Git 同其他系统的重要区别。它完全颠覆了传统版本控制的套路,并对各个环节的实现方式作了新的设计。Git 更像是个小型的文件系统,但它同时还提供了许多以此为基础的超强工具,而不只是一个简单的 VCS。
操作本地执行Git:不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。如果想要看当前版本的文件和一个月前的版本之间有何差异,Git 会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本地来作比较。
数据完整性:在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。换句话说,不可能在你修改了文件或目录之后,Git 一无所知。这项特性作为 Git 的设计哲学,建在整体架构的最底层。所以如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。Git 使用SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个SHA-1 哈希值,作为指纹字符串。该字串由 40 个十六进制字符(0-9 及a-f)组成,看起来就像是:24b9da6552252987aa493b52f8696cd6d3b00373Git的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。
综上,git特点:
1、分布式版本控制(共享、本地版本库);
2、不存在单点故障(本地版本库);
3、效率高(无需计算);
4、浪费磁盘空间(无所谓);
5、记录整体变化;
3 Git工作原理
3.1 相关术语
l 工作区(Working Directory):仓库文件夹里除.git目录以外的内容
l 版本库(Repository):.git目录,用于存储记录版本信息
l 暂存区(stage):.git/index
l 分支(master):git自动创建第一个分支
l HEAD指针:用于指向当前分支
3.2 Git执行流程
4 Window下git安装
4.1 略
参考安装文档。
4.2 简单命令
1、查看版本:git version
2、帮助文档:git help(列出所有命令的作用)
3、具体指令详细说明:git help xxx
5 Git模拟单人开发
步骤:
1、 在本地任意盘符的任意目录下创建一个文件夹:例如:tangseng
2、 将该文件夹作为git的本地仓库:进入该目录执行git init命令(在该目录下会产生一个.git的隐藏目录)
3、 创建一个文件:touch test.java
4、 查看该文件的状态:git statustest.java(如果不写文件名称则查看当前目录下所有的文件状态---终端显示的文件为红色:暂存态文件)
5、 将该文件添加到暂存区:git addtest.java(如果有多个文件我们可以直接通过git add .---将当前目录下所有的文件添加;我们可再次查看文件的状态,这时该文件变绿,表示已添加到暂存区.git/index)
6、 将该文件添加到本地仓库:git commit(提交失败,必须要添加注释信息:git commit -m “注释信息”.git/objects)
7、 查看操作该文件的日志:git logtest.java(不写文件名称则代表查看所有文件的操作日志)
8、 如果删除了该test.java文件,可通过该命令获取:git checkout -f HEAD
6 Git账号以及邮箱配置
说明:安装完git有默认的配置信息。例如:在win10该目录下的文件:C:\Users\阮文\.gitconfig
l 配置局部信息(.git/config)
1、git config user.name "Your Name"
2、git config user.email "you@example.com"
l 配置全局信息
1、git config --global user.name "Your Name"
2、git config --global user.email "you@example.com"
7 别名配置
7.1 增强版日志配置
说明:安装完git有默认的配置信息。例如:在win10该目录下的文件:C:\Users\阮文\.gitconfig
l 配置局部信息(.git/config)
1、git config user.name "Your Name"
2、git config user.email "you@example.com"
l 配置全局信息
1、git config --global user.name "Your Name"
2、git config --global user.email "you@example.com"
7.2 其他常见命令别名配置
说明:安装完git有默认的配置信息。例如:在win10该目录下的文件:C:\Users\阮文\.gitconfig
l 配置局部信息(.git/config)
1、git config user.name "Your Name"
2、git config user.email "you@example.com"
l 配置全局信息
1、git config --global user.name "Your Name"
2、git config --global user.email "you@example.com"
8 版本回退与撤销
1、文件执行commit操作:版本回退
l 回退到上一个版本:git reset --hard HEAD^(上一个:^;上两个:^^...)
l 回退到指定版本:git reset --hard 哈希值(前七位)
2、文件未执行commit操作:撤销
l git reset --hard HEAD:回到当前最高版本
l git checkout test.java:检出当前分支的最高版本
l 注意,如果修改了文件后,添加到暂存区,只能通过git reset --hard HEAD进行撤销
注意:关闭了终端,如何回退到具体的某个版本:通过git reflog:查看历史操作。
9 模拟多人开发
步骤:
一、项目经理:初始化git服务
1、在任意盘符下创建service目录;
2、在service同级目录下创建tangseng、wukong两个目录;
3、初始化git服务器:git init --bare;
二、程序员tangseng操作
1、进入tangseng目录下载代码:git clone d:/…/…/service
2、设置忽略文件:(github.com中搜索.gitignore):echo -e "Ctrl+C" > .gitignore(必须与.git在同级目录)
3、将.gitignore文件提交到远程服务器:
l git add .
l git commit -m “”
l git push
4、创建main.java文件,并且提交到远程服务器
l touch main.java
l git add .
l git commit -m “”
l git push
三、新加入程序员wukong操作
1、从远程服务器下载(克隆)代码:git clone url
2、wukong修改文件并且提交到远程服务器:
l 编辑main.java文件
l git add .
l git commit -m “”
l git push
四、产生代码解决
1、tangseng更新代码:git pull
2、tangseng修改代码并且提交远程服务器
l 编辑main.java文件
l git add .
l git commit -m “”
l git push
3、wukong修改代码
l 编辑main.java文件
l git add .
l git commit -m “”
l 更新代码:git pull
l 产生冲突
五、冲突解决
1、wukong编辑冲突文件;
2、然后依次执行add/commit/push操作
3、tangseng获取最新代码
10 git分支管理
10.1git分支与svn分支区别
10.1.1 svn分支
l truck(主干|主线|主分支):是用来做主方向开发的,新功能的开发应放在主线中。
l branch(分支):分支开发和主线开发是可以同时进行的,也就是并行开发,分支通常用于修复bug时使用。
l tag(标记):用于标记某个可用的版本,可以标记已经上线发布的版本,也可以标记正在测试的版本,通常是只读的。
10.1.2 git分支
l 主分支 master
l 开发分支 develop
l 功能分支 feature
l 预发布分支 release
l bug 分支 fixbug
l 其它分支 other
10.2git分支使用
创建分支并且解决分支合并冲突:
1、创建分支:git branch bugfix
2、切换分支:git checkout bugfix (git checkout -b bugfix:创建分支并且切换)
3、修改bugfix分支下的代码并且提交:
l 编辑文件
l git add .
l git commit -m “”
4、修改master分支下的代码并且提交
l 编辑文件
l git add .
l git commit -m “”
5、合并分支:git merge bugfix(注意:必须是在master分支下操作)
l 文件出现冲突
l 编辑文件,解决冲突
6、删除分支:git branch -d bugfix
- SVN与Git比较
- svn与Git比较
- SVN与Git比较
- SVN与Git比较
- git与svn区别
- SVN与Git比较
- SVN与Git比较
- SVN与Git比较
- SVN与Git比较
- SVN与Git比较
- SVN与Git比较
- git与svn
- svn与git常用命令
- SVN与Git比较
- SVN与Git比较
- git与svn
- 简记git与SVN
- SVN与Git比较
- 1.Arduino点亮LED灯
- 编程题
- Qt 信号和槽机制 优点 效率的详解
- 异常值检测
- POJ 2559 Largest Rectangle in a Histogram 【栈】
- git与svn
- 最可爱的最可爱的可爱的留言板ヽ(^ω^)ノ
- 通信码元速率和带宽理解
- 1、什么是RUP? 2、什么是极限编程XP? 3、什么是敏捷过程?
- C# Time.deltaTime 增量时间
- 1065. 单身狗(25)
- DFS解207. Course Schedule(判断有向图是否存在环)
- 从地球看太空
- 467. Unique Substrings in Wraparound String