Center VCS(集中式)
集中式版本管理系统包括CVS(Cocurrent Versions System)、SVN(Subversion)、Perforce等,其中最有名的就是SVN
集中式版本管理系统利用中央服务器来进行日常的版本控制操作,比如checkout、commit等。所有的操作都必须经过中央服务器,优点是可控性更高,但每一次操作都需要网络请求,会影响操作的流畅性,且具有致命的单点故障。一旦中央服务器发生了故障,轻则无法协同工作,重则可能会丢失历史消息
Distributed VCS(分布式)
分布式版本管理系统包括Git、Mercurial等,其中最有名的是Git
分布式指的是每一份本地仓库都是一个完整的项目历史拷贝,即使同步的中央服务器发生了故障,也可以很容易地从本地仓库中将历史还原出来。带来的好处是,如果部分操作不需要同步到服务器,可以在本地进行相关操作,这样可以让操作更加流畅
这也意味着你离线或者没有 VPN 时,几乎可以进行任何操作。 如你在飞机或火车上想做些工作,你能愉快地提交,直到有网络连接时再上传。 如你回家后 VPN 客户端不正常,你仍能工作。 使用其它系统,做到如此是不可能或很费力的。 比如,用 Perforce,你没有连接服务器时几乎不能做什么事;用 Subversion 和 CVS,你能修改文件,但不能向数据库提交修改(因为你的本地数据库离线了)。 这看起来不是大问题,但是你可能会惊喜地发现它带来的巨大的不同
【CVCS(svn为例)】
优点:
1、 管理方便,逻辑明确,符合一般人思维习惯
2、 集中式服务器更能保证安全性,权限机制的设计也更加简洁明确。一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理
3、 代码一致性非常高
缺点:
1、 中心代码服务器压力大,代码数据库容量暴增
2、 单点故障问题。如果中心服务器出现故障,所有操作都无法进行
3、 操作依赖网络。如果不能连接到代码服务器上,就不能提交,还原,对比等等,基本上不可以工作
4、 不适合开源开发(开发人数非常非常多)
【DVCS(git为例)】
优点:
1、 快速、灵活。每个开发中本地都有全量仓库,提交到本地非常快
2、 离线工作,能避免单点故障。即便远端代码服务器崩溃,开发者也能继续工作,无需等待修复。一定程度也是一种安全备份
3、 任意两个开发者之间可以很容易的合并和解决冲突
缺点:
1、 学习曲线稍微陡峭一些,要多花一点学习时间
2、 代码保密性差,不便于权限控制。一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息,权限控制需要另外一套系统来保证
因此,cvcs适合开发人数不多、对权限安全性要求更高的企业级项目;而dvcs适合团队分布在天南海北,对灵活性要求更高的开源项目
git基本使用
环境 :Linux rhel7
1.rpm安装git
$ sudo yum install -y git
从源代码安装
依赖
$ sudo yum install curl-devel expat-devel gettext-devel
openssl-devel zlib-devel
为了能够添加更多格式的文档(如 doc, html, info),你需要安装以下的依赖包:
$ sudo yum install asciidoc xmlto docbook2x
从 Kernel.org 网站获取
网址为 https://www.kernel.org/pub/software/scm/git
从 GitHub 网站上的镜像来获得
网址为 https://github.com/git/git/releases。 通常在 GitHub 上的是最新版本
编译并安装:
$ tar -zxf git-2.0.0.tar.gz
$ cd git-2.0.0
$ make configure
$ ./configure --prefix=/usr
$ make all doc info
$ sudo make install install-doc install-html install-info
初次运行 Git 前的配置
[root@server1 demo]# git config --global user.name “John Doe”
[root@server1 demo]# git config --global user.email johndoe@example.com
强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
文本编辑器
[root@server1 demo]# git config --global core.editor vim
检查配置信息
[root@server1 demo]# git config --list
user.name=Nmae
user.email=name@example.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
你可以通过输入 git config : 来检查 Git 的某一项配置
[root@server1 ~]# cd ~
[root@server1 ~]# cat .gitconfig
[user]
name = Nmae
email = name@example.com
[core]
editor = vim
[root@server1 demo]# git config user.email
name@example.com
[root@server1 demo]# git config user.name
Nmae
Git 时需要获取帮助,可以通过以下Git 命令查看使用手册:
[root@server1 demo]# git help
[root@server1 demo]# git --help
[root@server1 demo]# man git-
[root@server1 demo]# git help config
现有项目或目录下导入所有文件到 Git 中(不需要来联网)
[root@server1 demo]# git init
Initialized empty Git repository in /root/demo/.git/
[root@server1 demo]# l.
. … .git
[root@server1 demo]# ll .git/
total 12
drwxr-xr-x 2 root root 6 Feb 21 15:32 branches
-rw-r–r-- 1 root root 92 Feb 21 15:32 config
-rw-r–r-- 1 root root 73 Feb 21 15:32 description
-rw-r–r-- 1 root root 23 Feb 21 15:32 HEAD
drwxr-xr-x 2 root root 242 Feb 21 15:32 hooks
drwxr-xr-x 2 root root 21 Feb 21 15:32 info
drwxr-xr-x 4 root root 30 Feb 21 15:32 objects
drwxr-xr-x 4 root root 31 Feb 21 15:32 refs
[root@server1 demo]# touch helloworld.sh
[root@server1 demo]# git status -s
?? helloworld.sh
[root@server1 demo]# git add helloworld.sh
[root@server1 demo]# git status -s
A helloworld.sh
[root@server1 demo]# git commit -m ‘helloworld.sh’
[master (root-commit) 0afc367] helloworld.sh
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 helloworld.sh
克隆现有的仓库(需要联网)
[root@server1 demo]# git clone https://github.com/libgit2/libgit2
#自定义名称
[root@server1 demo]# git clone https://github.com/libgit2/libgit2 mylibgit
git详细使用命令,请参考官方文档
https://git-scm.com/book/en/v2