SVN、git、github-版本控制服务器

简述 SVN 版本控制服务

官方网站:http://subversion.apache.org/
Windows 客户端 TortoiseSVN:http://tortoisesvn.net/
多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS 版本控制系统是一种 GNU 软件包,主要用于在多人开发环境下的源码的维护。但是由于之前 CVS 编码的问题,现在大多数软件开发公司都使用 SVN 替代了CVS。


SVN 的运行方式及端口
独立服务器 3690 端口 访问方式 SVN:// C/S 模式
借助 apache 运行 80 端口 访问方式 http://
 

SVN+Apache 运行原理
SVN 搭配 Apache 的时候,Apache 需要使用 mod_dav_svn 这个模块,他的运行机制如下:

在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。有源代码库管理员统一管理这些源程序。
每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后开发人员可以在本地修改,然后用 svn 命令进行提交,由源代码库统一管理修改。

mod_dav_svn 可以让版本库通过 http 协议实现网站展现

安装 SVN

实验环境:

SVN+HTTP Server (centos-80)
Client Server(centos-90)

[root@centos-80 ~]# yum install -y subversion httpd mod_dav_svn
[root@centos-80 ~]# cat /etc/services | grep svn  #查看已注册端口

创建版本库目录


[root@centos-80 ~]# mkdir /webdept     #存放版本库的主目录

创建两个版本库


[root@centos-80 ~]# svnadmin create /webdept/www.centos80.cn
[root@centos-80 ~]# svnadmin create /webdept/www.centos90.cn
[root@centos-80 ~]# ls /webdept/www.centos80.cn/     #随便查看一个版本库

dav 目录:是提供 apache 与 mod_dav_svn 使用的目录,让他们存储内部数据,刚开始新建时此目录没有
db 目录:就是所有版本控制的数据存放文件
hooks 目录:放置 hook 脚本文件的目录
locks 目录:用来放置 subversion 监控锁定数据的目录,用来追踪存取文件库的客户端
format 文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号
conf 目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件
[root@centos-80 ~]# ls /webdept/www.xuegod.cn/conf/

authz passwd svnserve.conf
authz #认证权限相关
passwd #用户名和密码
svnserve.conf #服务器配置文件

针对不同版本库修改配置文件

vim /webdept/www.centos80.cn/conf/svnserve.conf
[general]
anon-access = read #原先注释掉了,匿名用户可以读,使用 none 的话就是匿名用户不可以访问
改:20 # auth-access = write #这几行都要取消注释,认证用户可以写,可以是 read,write,none
为:20 auth-access = write
改:27 # password-db = passwd #密码库文件,默认使用的是同一目录下的 passwd 文件作为用户密码库
为:27 password-db = passwd
改:34 # authz-db = authz #认证权限文件
为:34 authz-db = authz
改:39 # realm = My First Repository #登陆提示信息
为:39 realm = My First Repository
注意:此配置文件的所有内容必须顶格,否则会报错

配置用户和密码及认证权限

[root@centos-80 conf]# vim /webdept/www.centos80.cn/conf/passwd   #设置用户名和密码
[users]
Make = 123456
MAN = 123456
top = 123456
对于部分版本,前面的[users]是有#号的,如果有#号,一定要取消,否则只能使用匿名用户登录,客户端登录不会出现登录窗口或密码提示,除非在配置文件将 anon 设置为 none,否则将返回一个错误

[root@centos-80 conf]# vim /webdept/www.centos80.cn/conf/authz #设置用户和组的权限

SVN 目录格式:
[/目录名]
@用户组名 =权限
用户名 =权限
*=

服务 SVN 启动及创建测试代码

[root@centos-80 conf]# svnserve -d -r /webdept/  #启动两个版本库
[root@centos-80 conf]# svnserve -d -r /webdept/www.centos90.cn/  #启动指定版本库
[root@centos-80 conf]# netstat -anput | grep svn
使用 svn 导入测试代码
导入测试代码格式: svn [选项] 源码 svn://server ip/项目名
常见的选项:
import  #将未版本化的文件纳入版本控制并提交
checkout #从版本库中检出一个修订版
update  #更新工作拷贝
add,delete,copy,move #增、删、复制、移动文件或目录
status  #检查状态差异
diff #检查文件行级详细差异
revert  #恢复
resolve #解决冲突
switch  #切换工作拷贝对应的版本库分支
log #查看历史记录
list #显示文件目录
cat #查看某个文件内容

[root@centos-80 ~]# mkdir /root/localsvn
[root@centos-80 ~]# cd localsvn/;touch 1.html 2.html;cd
[root@centos-80 ~]# svn import /root/localsvn/ file:///webdept/www.centos80.cn/ -m "first edit"

#本地导入代码,使用 file,仅仅能在服务器本地导入, -m=messages,类似注释,首次加入代码使用 import

代码取出

[root@centos-80 ~]# svn checkout svn://192.168.0.80/www.centos80.cn/ /root/down1
[root@centos-80 ~]# ls /root/down1
1.html  2.html
代码添加
[root@centos-80 ~]# cd /root/down1
[root@centos-80 down1]# touch 5.html
[root@centos-80 down1]# svn add 5.html      #添加到 SVN 服务中
A         5.html
[root@centos-80 down1]# svn commit -m "second edit"      #提交

Make 用户没有权限,回车更换用户。
commit,SVN 的提交是将在工作空间做的修改进行提交,包括文件内容的修改,文件或目录的添加,删除,命名,移动等操作。

SVN+Apache

SVN+Apache 的需要 subversion 的两个动态库支持,同时我们需要密码的验证支持!
查看 apache 对 svn 模块的支持
vim /etc/httpd/conf.modules.d/10-subversion.conf

[root@centos-80 down1]# ls /etc/httpd/modules/*svn*

配置 apache 支持 svn

[root@centos-80 down1]# vim /etc/httpd/conf.d/subversion.conf

<Location /webdept>
        DAV svn
        SVNParentPath /webdept
                AuthType Basic
                AuthName "www.centos80.cn website Dept"
                AuthUserFile /webdept/svn/passwd
                AuthzSVNAccessFile /webdept/svn/authz
                Require valid-user
</Location>

<Location /webdept>
DAV svn
SVNParentPath /webdept #svn 根目录
AuthType Basic #Basic 认证方式
AuthName "www.centos80.cn website Dept" #认证显示信息,提示信息
AuthUserFile /webdept/svn/passwd #用户密码文件
AuthzSVNAccessFile /webdept/svn/authz #访问控制权限文件
Require valid-user #要求正式用户,不能匿名
</Location>

创建用户 passwd 文件

[root@centos-80 down1]# mkdir /webdept/svn
[root@centos-80 down1]# htpasswd -c /webdept/svn/passwd user1
[root@centos-80 down1]# htpasswd /webdept/svn/passwd user2
[root@centos-80 down1]# htpasswd /webdept/svn/passwd user3
[root@centos-80 down1]# htpasswd /webdept/svn/passwd admin
#第二次不能用-c,否则会覆盖 webuser
[root@centos-80 down1]# cat /webdept/svn/passwd

创建权限 authz 文件

[root@centos-80 down1]# vim /webdept/svn/authz      #创建权限控制文件

[groups]
all=user1,user2
[/]
admin=rw
[www.centos80.cn:/]
@all=rw
[www.centos90.cn:/]
user2=rw
user3=rw

[groups]
all = user1,user2
[/] #“/”表示所有仓库的跟目录下
admin = rw
[www.centos80.cn:/] #第一个仓库,user1 和 user2 可以读写
@all = rw
[www.centos90.cn:/] #第二个仓库目录,user2 和 user3 可以读写
user2 = rw
user3 = rw

启动服务测试

centos90 只有user2和user3有权限,user1没有权限,所以用user1登录看不到内容


admin拥有所有仓库的根目录下权限

Windows下使用 TortoiseSVN 工具来配置,官方网站:http://tortoisesvn.net/downloads.html


给服务器上的目录更改用户权限

[root@centos-80 down1]# chown -R apache.apache /webdept/www.centos80.cn/






GIT 服务

Git,Git 是一个开源的分布式版本控制系统,用以有效、高速的处理,管理从很小到非常大的项目版本。Git 是 Linus Torvalds (林纳斯·托瓦兹)为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

工作原理


在 Git 中的绝大多数操作都只需要访问本地文件和资源,不用联网。但如果用 CVCS 的话,差不多所有操作都需要连接网络。因为 Git 在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。

举个例子,如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。如果想要看当前版本的文件和一个月前的版本之间有何差异,Git 会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本地来作比较。

用 Git 的话,就算你在飞机或者火车上,都可以非常愉快地频繁提交更新,等到了有网络的时候再上传到远程仓库。同样,在回家的路上,不用连接 VPN 你也可以继续工作。

对于任何一个文件,在 Git 内都只有三种状态:
已提交(committed)已提交表示该文件已经被安全地保存在本地计算机数据库中了;
已修改(modified)已修改表示修改了某个文件,但还没有提交保存;
已暂存(staged)已暂存表示把已修改的文件放在下次提交时要保存的清单中。
由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库。

每个项目都有一个 Git 目录(如果 git clone 出来的话,就是其中 .git 的目录;如果 git clone--bare 的话,新建的目录本身就是 Git 目录。),它是 Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

基本的 Git 工作流程如下:
1.  在工作目录中修改某些文件;
2.  对修改后的文件进行快照,然后保存到暂存区域;
3.  提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。

所以,我们可以从文件所处的位置来判断状态:如果是 Git 目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

GIT 优点
1.  更顺畅的工作流程,开发过程中,完全可以离线操作
2.  快速,Git 分布式架构使得本地仓库包含所有的历史版本信息,你可以在不同的版本之间快速切换
3.  弹性的本地分支,在 svn 下,你建一个分支需要把源代码复制到另外一个文件夹,而在 Git 下,创建分支的代价是非常小的,只需一条命令
4.  仓库目录结构简洁,用 Git 复制一个项目,只会在项目根目录创建一个.git 的目录,而其他目录很干净
5.  内容按元数据方式存储,所有的版本信息都位于.git 目录下
6.  完整性好,更易于协作开发
7.  用户群大,现在已经有成千上万个开源项目采用 Git 来做项目管理,github 上更是有无数个代码仓库

搭建 GIT 服务器及使用

[root@centos-80 ~]# yum -y install git
[root@centos-90 ~]# yum -y install git

[root@centos-80 ~]# useradd -m git
[root@centos-80 ~]# passwd git
[root@centos-80 ~]# su git
[git@centos-80 root]$ cd
[git@centos-80 ~]$ pwd
/home/git
[git@centos-80 ~]$ mkdir project.git
[git@centos-80 ~]$ cd project.git/
[git@centos-80 project.git]$ git init --bare
初始化空的 Git 版本库于 /home/git/project.git/
[git@centos-80 project.git]$ ls
branches  config  description  HEAD  hooks  info  objects  refs

[root@centos-90 project]# pwd
/root/git/project
[root@centos-90 project]# cd ..
[root@centos-90 git]# git clone git@192.168.0.80:/home/git/project.git/
[root@centos-90 git]# cd project/
[root@centos-90 project]# ls .git
branches  config  description  HEAD  hooks  index  info  objects  refs
[root@centos-90 project]# echo "NO.1" > 1.html
[root@centos-90 project]# git add .
[root@centos-90 project]# git commit -m "NO.1"
[master(根提交) 7e9d7e3] NO.1
 1 file changed, 1 insertion(+)
 create mode 100644 1.html
[root@centos-90 project]# git remote add origin git@192.168.0.80:/home/git/project.git
fatal: 远程 origin 已经存在。
[root@centos-90 project]# git push origin master
git@192.168.0.80's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 203 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.0.80:/home/git/project.git
 * [new branch]      master -> master
[root@centos-90 project]# vim 1.html
[root@centos-90 project]# git add 1.html
[root@centos-90 project]# git commit -m "No.2"
[master 11132d9] No.2
 1 file changed, 1 insertion(+)
[root@centos-90 project]# vim 1.html
[root@centos-90 project]# git add 1.html
[root@centos-90 project]# git commit -m "No.3"
[master ee706eb] No.3
 1 file changed, 1 insertion(+)
[root@centos-90 project]# git push
git@192.168.0.80's password: 
Counting objects: 8, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 442 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@192.168.0.80:/home/git/project.git
   7e9d7e3..ee706eb  master -> master

Windows 使用方法

http://tortoisegit.org/download/ #Windows 客户端下载地址
https://git-for-windows.github.io/ #msysgit 客户端下载地址
Windows 安装 Tortoisegit 之前,需要安装支撑软件 msysgit(Windows 下面类似于 Linux 下面命令行的一个工具),这样 tortoisegit 才能正常运转!
首先安装 msysgit,一切默认即可!安装完成之后,看看 msysgit 的工具
按下图指示操作



注意:D:\test\git 不能够在 Windows 上存在


输入 yes 之后输入密码(密码提示输入多次)


克隆完成以后,发现克隆出来的文件是否和之前编辑的文件内容相同

工作流程:



开始编辑程序(增加、修改、删除等)

扫描完成的开发文件

添加到暂缓区

添加个性化交互提示信息:

git config --global user.name "man"
git config --global user.email “man@163.com

签名

提交到本地仓库

提交到服务器仓库



使用 TortoiseGit
安装 TortoisGit,默认安装都可以满足要求
新建 git 目录,进入 git 目录
把远程代码克隆到本地目录




克隆下载成功

测试代码添加

增加到缓存区

提交到本地仓库

输入注释信息:

提交到远程服务器仓库

Remote 远端:可新建分支进行推送,比如输入man,进行推送



切换分支

创建分支

创建新分支hello,基于 HEAD(man), switch to new branch 切换到新分支

使用 github

GitLab 版本管理
GitLab 是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过Web 界面进行访问公开的或者私人项目。它拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

https://gitee.com/

[root@centos-80 ~]# ssh-keygen
[root@centos-80 ~]# cat .ssh/id_rsa.pub


echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/weew886/test.git
git push -u origin master #这里如果不是master分支是man分支,就写man
git log #查询本地 git 仓库 有多少次 commit 修改
git pull --rebase #同步远程仓库的最新状态到本地仓库 同时Linux 本地目录也一起同步了,就是让远程覆盖本地
git reset --hard 7e9d7e33eef2#版本回退(commit 一部分即可)
#Hard 后面接版本号,版本号是用 git log 查出来的 commit 号,取前六位即可



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值