一、集中式版本控制系统
1.所有的客户端不能直接相互通信(交换代码),必须经过服务端才能交换代码
2.所有的”版本控制文件”都保存在服务端。一旦服务器宕机,客户端不能进行版本回滚。
二、分布式版本控制
1.所有客户端可以不用和服务器进行交互,尽可以实现客户端之间的交换代码
2.在所有的客户端都有记录的代码版本,不用服务端,就可以进行版本回滚
其它区别
- git每个历史版本存储完成的文件,svn存储的是文件差异
2.Git可以离线完成大部分操作,svn则相反。
3.git 分支和合并能力更好
5.git有更强的撤销修改和修改版本历史的能力
Git的工作流程如图
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
创建Git仓库的方法分为两种:
- git init :将一个目录初始化一个仓库
- git clone:将一个已经有的目录克隆到另外一个位置
仓库又分为两种:
第一种是
裸仓库:不带工作区。生成的文件没有在.git目录当中
git init –-bare 目录名称
第二中就是:
带工作区的目录:生成的文件在.git目录当中
git init 目录名称
三、使用模式
1.对于开发人来将,一般会在自己本地创建一个本地库。然后通过公网在GitHup上申请一个git账号。
然后在上边创建仓库,然后在将本地的仓库和Githup上的仓库做”关联”。这样本地和远程就可以同步了。那么开发人员申请公网githup的作用就是:
- 作为自己本地库的备份
- 还可以让其他人通过公网的仓库共享本地仓库的代码。
- 对于上述的情况,存在一定的问题。
- 代码公开在了githup上,还有一部分收费
- 如果断网了,数据就不能同步到公网了,其他人也就无法通过公网的仓库来共享代码了。
四、搭建git服务器
GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。
搭建Git服务器需要准备一台运行Linux的机器。
环境:
操作系统 IP 角色
Centos6.5 192.168.3.10 git-server
192.168.3.11 git-client1
192.168.3.12 git-client2
Git-server:在内网搭建的git服务器
Git-client1:在内网的开发人员A
Git-client2:在内网的开发人员B
1.在设置git仓库之前,需要为仓库设置用户名和邮箱。否则在提交文件的时候会提示你设置。这个邮箱和名字会标识客户端的身份。
[root@a ~]# git config --global user.name "git_test"
[root@a ~]# git config --global user.email "git_test@163.com"
查看配置
[root@centos6 ~]# git config --list
user.name=git_test
user.email=git_test@163.com
2.创建一个版本库,选择一个系统目录
[root@a ~]# useradd git
[root@a ~]# passwd git
[root@a ~]# chown -R git:git /git
[root@a ~]# mkdir /git
初始化这个目录为git可以管理的仓库.
[root@centos6 /]# git init --bare /git/
Initialized empty Git repository in /git/
查看git目录下有很多文件和目录。他们并没有生成在.git的隐藏目录下。这说明我们创建的是一个裸仓库
[root@centos6 /]# ls /git/
branches config description HEAD hooks info objects refs
执行以上命令,会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。
在windows客户端商安装git。我们主要以linux为例子。因为windows的命令行和linux上的操作一致。所以在这里简单的介绍windows如何安装
Git-2.15.1.2-64-bit.exe
安装完毕之后,在客户端出现了
git GUI Here :图形化
在客户端克隆远程仓库,
1.在e盘创建一个目录,命名为git_test1.
2、克隆远程仓库,到本地的e:\git_test1
git clone git@192.168.3.1:/git e:\git_test1
3.进入到目录下,添加test.txt为要提交的文件
cd e:\git_test1
git add test.txt
git commit -m '初始状态'
五、使用git
我们在3.11上克隆一份git服务器上的仓库。
- 仓库克隆准备
为了方便和git服务通信。我们3.11生成密钥对,通过git用户使用密钥对和服务器通信。我们将公钥发送给git服务器。
(1)生成密钥对
ssh-keygen -t rsa
(2)将公钥发送给git服务器
ssh-copy-id -i /root/.ssh/id_rsa.pub git@192.168.3.10
(3)修改git(3.10)服务器的配置文件
vim /etc/ssh/sshd_config
AuthorizedKeysFile /home/git/.ssh/authorized_keys
- 克隆服务器的git仓库(3.11)
mkdir /test.git
克隆.10上的名称为git的仓库
git clone git@192.168.3.10:/git /test.git
[root@centos6 ~]# cd /test.git/
[root@centos6 test.git]# ls -a
. .. .git
- git常用命令
cd /test.git/
touch test
echo "123" > test
添加文件到暂存区
git add test
添加所有文件到缓存区域
Git add –A
在暂存区中删除某个文件,但是本地不删除
git rm –cache test
查看暂存区中的文件
git status
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: test
提交文件
git commit -m '初始状态'
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 aa
create mode 100644 test
已经提交成功
五、版本回滚
1.查看文件提交的记录git log
[root@centos6 test.git]# git log
commit c9433ebcbb0f66d41cbe9d834e366cc12a5008aa
Author: client1 <client1@163.com>
Date: Wed Jul 18 19:17:34 2018 +0800
delete all
commit 4b68920e3158affff6ec6b7d0ef769539e5a4da9
Author: root <root@centos6.5-2>
Date: Wed Jul 18 19:13:43 2018 +0800
初始状态
如果信息过多的话,我们可以加上--pretty=oneline
[root@centos6 test.git]# git log --pretty=oneline
c9433ebcbb0f66d41cbe9d834e366cc12a5008aa delete all
4b68920e3158affff6ec6b7d0ef769539e5a4da9 初始状态
只显示版本号和提交信息
版本回滚的方法:
第一种:git reset --hard HEAD^
HEAD^ 代表上一个版本
HEAD^^ 代表上上一个版本
HEAD^^^代表上上上一个版本
如果是上100个版本就是 HEAD~100
第二种: git reset --hard 4b68920e3158affff6ec6b7d0ef769539e5a4da9
回滚到指定的版本
2.我们还可以查看git的命令历史记录
git reflog
根据命令历史记录来进行回滚