赞
踩
版本控制的英文名称为(Version Control System),主要有以下几个作用。
名称 | 模型 | 并发模式 | 历史模式 | 变更范围 | 网络协议 | 原子提交性 |
CVS | Client-server | Merge | Changeset | File | Pserver,ssh | No |
SVN | Client-server | 3-way merge, recursive merge, octopus merge | Changeset and Snapshot | Tree | custom (svn), custom (svn) over ssh, HTTP and SSL (usingWebDAV) | Yes |
Git | Distributed | Merge or lock | Snapshot | Tree | custom, custom over ssh, rsync, HTTP/HTTPS, email, bundles | Yes |
* 版本库模型(Repository model):描述了多个源码版本库副本间的关系,有客户端/服务器和分布式两种模式。在客户端/服务器模式下,每一用户通过客户端访问位于服务器的主版本库,每一客户机只需保存它所关注的文件副本,对当前工作副本(working copy)的更改只有在提交到服务器之后,其它用户才能看到对应文件的修改。而在分布式模式下,这些源码版本库副本间是对等的实体,用户的机器出了保存他们的工作副本外,还拥有本地版本库的历史信息。
* 并发模式(Concurrency model):描述了当同时对同一工作副本/文件进行更改或编辑时,如何管理这种冲突以避免产生无意义的数据,有排它锁和合并模式。在排它锁模式下,只有发出请求并获得当前文件排它锁的用户才能对对该文件进行更改。而在合并模式下,用户可以随意编辑或更改文件,但可能随时会被通知存在冲突(两个或多个用户同时编辑同一文件),于是版本控制工具或用户需要合并更改以解决这种冲突。因此,几乎所有的分布式版本控制软件采用合并方式解决并发冲突。
* 历史模式(History model):描述了如何在版本库中存贮文件的更改信息,有快照和改变集两种模式。在快照模式下,版本库会分别存储更改发生前后的工作副本;而在改变集模式下,版本库除了保存更改发生前的工作副本外,只保存更改发生后的改变信息。
* 变更范围(Scope of change):描述了版本编号是针对单个文件还是整个目录树。
* 网络协议(Network protocols):描述了多个版本库间进行同步时采用的网络协议。
* 原子提交性(Atomic commit):描述了在提交更改时,能否保证所有更改要么全部提交或合并,要么不会发生任何改变。
简而言之,各有优缺点,git要配合hub,可以避免分布式损坏。svn有权限控制,避免全被clone走。git适合纯代码,svn适合综合性文档管理,结合起来就完美。显然最大的不同在于git是分布式的。
优点:团队协作开发,代码集中化管理。
缺点:单点故障,必须联网工作,无法单机本地工作。
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了。
新建文件状态为untracked,add命令执行后状态变为staged,已存在的文件状态为unmodified,修改文件内容,文件状态变为modified,commit提交,文件状态编程unmodifed。
第一步:先官网注册账号:https://github.com
第二步:下载安装文件:Git-2.12.0-64-bit.exe,一路next,安装完桌面右键菜单有下面两项,安装完成。选择Git Bash Here,进入git客户端。
提交文件时,就知道这个文件是谁提交的。出了问题,就知道谁干的!
D:\javaenv\git_repository
- Administrator@tonythink MINGW64 ~/Desktop
- $ cd d: #进入d盘
- Administrator@tonythink MINGW64 /d
- $ cd javaenv
- $ mkdir git_repository #创建目录
- $ cd git_repository #进入目录
- $ git init
- Administrator@tonythink MINGW64 /d/javaenv/git_repository (master)
当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,是因为默认这个目录是隐藏的,要显示修改其显示隐藏文件即可,一般无需修改。
- 创建hi.txt
- $ git add hi.txt #暂存单个文件
- $ git add ./* #批量暂存当前目录下所有内容
- $ git status #查看文件状态
- $ git commit -m "test" #提交
- [master (root-commit) e522732] test
- 1 file changed, 1 insertion(+)
- create mode 100644 hi.txt
- $ git status #查看文件状态
- $ git log
- commit e522732d94c440fdd750368ce937ac1c40dbd2ed #本次提交唯一标识,对于版本回退非常有用
- Author: nutony <52399178@qq.com>
- Date: Fri Jun 2 09:39:31 2017 +0800
-
- test
修改hi.txt文件内容,然后和仓库中已经提交的hi.txt比较
- $ git diff hi.txt
- diff --git a/hi.txt b/hi.txt
- index 32f95c0..d7d0f3f 100644
- --- a/hi.txt
- +++ b/hi.txt
- @@ -1 +1 @@
- -hi
- \ No newline at end of file
- +<B1>Ƚϵ<B1>ǰ<CE>ļ<FE><BA>Ͳֿ<E2><CE>ļ<FE> #中文乱码
- \ No newline at end of file
-
- Administrator@tonythink MINGW64 /d/javaenv/git_repository (master)
- $ git diff hi.txt
- diff --git a/hi.txt b/hi.txt
- index 32f95c0..2b80830 100644
- --- a/hi.txt
- +++ b/hi.txt
- @@ -1 +1 @@
- -hi
- \ No newline at end of file
- +<U+FEFF>比较当前文件和仓库文件 #文件格式改为UTF-8即可
- \ No newline at end of file
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
git的文件状态
文件新建完状态为untracked
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。