代码管理系统简介与部署(Introduction and Deployment of Code Management System)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

代码管理系统简介与部署
技能目标:
- 了解各软件版本控制系统
- 掌握各软件版本控制系统的安装与部署

1.1 案例分析

1.1.1 案例概述

在开发一个项目时,如果只有几十行代码或几百行代码时维护还算简单,但是当代码数
量达到一定程度或两三个人共同开发一个项目时,就很容易会出现代码混乱、冲突、排错难
等问题。当代码编写完成以后发现整个项目运行不了时,提交的代码也无法确认到责任人,
导致维护项目时需要花费数倍的时间。为解决上述问题,版本控制系统应运而生。
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管
理,是软件配置管理的核心思想之一。

1.1.2 案例前置知识点

1. 常见的版本控制系统介绍

Git 是一个开源的分布式版本控制系统,用于有效、高速的处理版本控制,从很小到非
常大的项目都支持。一个原始 Git 版本仓库,可以让其他主机克隆这个原始版本仓库,从而
使得一个 Git 版本仓库可以同时分布到不同的主机上,并且每台主机的版本库都是一样的,
并没有主次之分,极大的保证了数据的安全性,并使得用户能够自主选择 Git 服务器推送文
件。作为一个分布式的版本控制系统,在 Git 中并不存在主库这样的概念。每一份复制出的
库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。
Git Linus Torvalds 为了帮助管理 Linux 内核开发而设计的一个开放源码的版本控制
系统,是作为一种过渡方案用来替代 BitKeeperBitKeeper 一直是 Linux 内核开发人员在
全球使用的主要源代码工具。因为开放源码社区中有些人认为 BitKeeper 的许可证并不适合
开放源码社区的工作,所以 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管
最初研发 Git 的目的是为了辅助 Linux 内核开发,但目前在很多其他自由软件项目中也使用
Git
GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本
库格式进行托管,故名 GitHubGitHub 可以提供给用户空间创建 Git 仓储,保存用户的一
些数据文档或者代码等。GitHub 作为开源代码库以及版本控制系统,目前拥有 140 多万开
发者用户。随着越来越多的应用程序转移到了云上,GitHub 已经成为了管理软件开发以及
发现已有代码的首选方法。GitHub 可以托管各种 Git 库,并提供一个 Web 界面,但与其它
SourceForge Google Code 这样的服务不同,GitHub 的独特卖点在于从另外一个项
目进行分支的简易性。
GitLab 是一个基于 Git 的项目管理软件,用于仓库管理系统的开源项目。使用 Git 作为代
码管理工具,并在此基础上搭建起来 Web 服务。GitGitlabGithub 都是基于 Git 的,可
以说是 Git 的衍生品。
Subversion 英文全称为 Apache Subversion(简称 SVN),是一个开放源代码的版本
控制系统。相较于 RCSCVSSubversion 采用了分支管理系统,其设计目标就是取代
CVS。互联网上很多版本控制服务都是从 CVS 转移到 Subversion 的。

2. Git、Subversion 功能特性

Git 不仅是一款开源的分布式版本控制系统,而且有其独特的功能特性。例如大多数的
分布式版本控制系统只会记录每次文件的变化,它们只关心文件的内容变化差异,而 Git
是关注于文件数据整体的变化,直接会将文件提交时的数据保存成快照,而非仅记录差异内
容,并且使用 SHA-1 加密算法保证数据的完整性。从一般开发者的角度来看,Git 有以下功
能:
克隆数据库版本:从服务器上克隆数据库(包括代码和版本信息)到本机上;
提交代码:在本机自己创建的分支上提交代码;
合并分支:在本机上合并分支;
拉取合并分支:新建一个分支,把服务器上最新版的代码 Fetch 下来,然后跟自己
的主分支合并;
代码冲突解决:一般开发者之间解决冲突的方法是,开发者可以使用 pull 命令拉
取代码,解决冲突,解决完冲突之后再向主开发者提交补丁。
Subversion 属于传统的版本控制系统,以下是 Subversion 功能特性:
统一的版本号:SVN 在任何一次提交时,都会对所有文件增加一个新的版本号,
版本号相同的文件才能构成一个项目软件版本;
原子提交:一次提交不管是单个还是多个文件,都是作为一个整体提交的。在这当
中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏;
版本记录:重命名、复制、删除文件等动作都保存在版本历史记录当中。对于二进
制文件,使用了节省空间的保存方法(简单的理解,就是只保存和上一版本不同之
处)。当目录也有版本历史或者整个目录被移动或者复制,能够保留全部版本记录;
开销:分支的开销非常小;
元数据管理:每个目录或文件都可以定义属性(Property),它是一些隐藏的键值
对,用户可以自定义属性内容,而且属性和文件内容一样在版本控制范围内;
格式支持:支持 FSFS Berkeley DB 两种资料库格式。

1.1.3 案例环境

1. 本案例环境

本案例环境如表 1-1 所示。
1-1 代码版本控制系统环境
主机操作系统主机名/IP 地址 主要软件及版本
服务器CentOS 7.3-x86_64master/192.168.9.246Git Gitlab SVN
客户端CentOS 7.3-x86_64client/192.168.9.247Git

2. 案例需求

安装部署 GitGitlabSVN 等几种常见的代码管理控制系统。

3. 案例实现思路

1)准备案例实现环境。
2)部署 Git 版本控制系统。
3)部署 Gitlab 版本控制系统。
4)部署 Subversion 版本控制系统。

1.2 案例实施1.2.1 部署 Git 服务器

1. 系统环境准备

//两台服务器均执行如下命令
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
[root@master ~]# systemctl stop NetworkManager
[root@master ~]# systemctl disable NetworkManager
[root@master ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
[root@master ~]# setenforce 0

2. 使用 YUM 安装 Git

[root@master ~]# yum install -y git //两台服务器都需要安装

创建 Git 版本仓库,一般要以.git 为后缀。
[root@master ~]# mkdir linuxprobe.git
[root@master ~]# useradd git
[root@master ~]# passwd git
更改用户 git 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@master ~]# chown -Rf git:git linuxprobe.git
初始化 Git 版本仓库。
[root@master ~]# cd linuxprobe.git
[root@master linuxprobe.git]# git --bare init
初始化空的 Git 版本库于 /root/linuxprobe.git/
此时,Git 服务器已经部署好,但用户还不能向服务器推送数据,也不能克隆 Git 版本
仓库。要想实现上述功能,需要在服务器上开放至少一种支持 Git 的协议,比如:
HTTP/HTTPS/SSH 等。现在使用最多的就是 HTTPS SSH,本案例中使用 SSH 协议。
切换至 Git 客户机来生成 SSH 密钥。
[root@client ~]# ssh-keygen
//一路回车
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
f3:35:60:41:6a:ef:85:da:fe:b2:39:f7:50:14:47:21 root@client
The key's randomart image is:
+--[ RSA 2048]----+
|
.o E.o+|
|
. . .o |
|
o o
. |
|
. o o .
|
|
S o + . |
|
* o o
|
|
. + .
|
|
.o...
|
|
+*... |
+-----------------+
[root@client ~]# ssh-copy-id 192.168.9.246 //将客户机的公钥传递给 Git 服务器
The authenticity of host '192.168.9.246 (192.168.9.246)' can't be established.
ECDSA key fingerprint is ca:0f:4c:c3:f5:2a:8e:30:94:77:b1:44:00:8e:84:fd.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already
installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install
the new keys
root@192.168.9.246's password:
Number of key(s) added: 1
Now try logging into the machine, with:
"ssh '192.168.9.246'"
and check to make sure that only the key(s) you wanted were added.
这样,可以从 Git 服务器中克隆版本仓库(此时目录内没有文件是正常的)。
[root@client ~]# git clone root@192.168.9.246:/root/linuxprobe.git
正克隆到 'linuxprobe'...
warning: 您似乎克隆了一个空版本库。
配置用户名称和电子邮件地址。每次 Git 提交时都会引用这两条信息,记录提交了文
件的用户,并且会随更新内容一起被永久纳入历史记录。
[root@client ~]# git config --global user.name "Zhan San"
[root@client ~]# git config --global user.email root@linuxprobe.com
设置 vim 为默认的文本编辑器。
[root@client ~]# git config --global core.editor vim查看 Git 工作环境信息。
[root@client ~]# git config --list
user.name=Zhan San
user.email=root@linuxprobe.com
core.editor=vim
Git 只能追踪类似于 txt 文件、网页、程序源码等文本文件内容的变化,下面模拟代码
提交过程。
[root@client ~]# cd linuxprobe /
[root@client linuxprobe]# echo "Initialization Git repository" > readme.txt
将该文件添加到暂存区。
[root@client linuxprobe]# git add readme.txt
添加到暂存区后再次修改文件的内容。
[root@client linuxprobe]# echo "Something not important" >> readme.txt
将暂存区的文件提交到 Git 版本仓库,命令格式为:git commit -m "提交说明"
[root@client linuxprobe]# git commit -m "add the readme file"
[master(根提交) c7824b8] add the readme file
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
查看当前工作目录的状态。
[root@client linuxprobe]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
#
(使用 "git add <file>..." 更新要提交的内容)
#
(使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#
修改:
readme.txt
#
修改尚未加入提交(使用 "git add" /"git commit -a"
(1)第一次修改提交代码:git 将代码文件提交到本地 Git 版本数据库,此时会在暂存
区生产一个快照版本;
(2)第二次修改提交代码:当再次修改代码时,需要重新提交代码文件到暂存区,此
时还会生产一个快照版本;
(3)提交代码:只有将暂存区的代码文件提交到 Git 版本数据库才能算真正提交。查看当前文件内容与 Git 版本数据库中的差别。
[root@client linuxprobe]# git diff readme.txt
diff --git a/readme.txt b/readme.txt
index cb06697..33d16d0 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
Initialization Git repository
+Something not important
把文件提交到 Git 版本数据库。
[root@client linuxprobe]# git add readme.txt
[root@client linuxprobe]# git commit -m "added a line of words"
[master ebc5069] added a line of words
1 file changed, 1 insertion(+)
再次查看下当前 Git 版本仓库的状态。
[root@client linuxprobe]# git status
# 位于分支 master
无文件要提交,干净的工作区
本次操作还是只将文件提交到了本地的 Git 版本仓库,并没有推送到远程 Git 服务器,
所以需要定义远程的 Git 服务器。
[root@client linuxprobe]# git remote add server root@192.168.9.246:/root/linuxprobe.git
将文件提交到远程 Git 服务器。
[root@client linuxprobe]# git push -u server master
Counting objects: 6, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 521 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To root@192.168.9.246:/root/linuxprobe.git
* [new branch]
master -> master
分支 master 设置为跟踪来自 server 的远程分支 master
为了验证文件是否推送到远程的 Git 服务,可以换个目录再次克隆一份版本仓库。
[root@client linuxprobe]# mkdir test
[root@client linuxprobe]# cd test/
[root@client test]# git clone root@192.168.9.246:/root/linuxprobe.git
正克隆到 'linuxprobe'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
接收对象中: 100% (6/6), done.
[root@client test]# cd linuxprobe/
[root@client linuxprobe]# cat readme.txt //查看该文件是否存在,存在说明克隆成功
Initialization Git repository
Something not important
1.2.2 部署 GitLab 服务器
GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基
础上搭建 Web 服务。建议:服务器内存 4G 以上。
[root@master ~]# vim /etc/yum.repos.d/gitlab-ce.repo
//添加 GitLab
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
[root@master ~]# yum makecache
[root@master ~]# yum install -y gitlab-ce
[root@master ~]# gitlab-ctl reconfigure //加载配置文件并启动,前提是 80 端口没有被占用
Starting Chef Client, version 13.6.4
resolving cookbooks for run list: ["gitlab"]
Synchronizing Cookbooks:
- postgresql (0.1.0)
......
//省略部分内容
Running handlers:
Running handlers complete
Chef Client finished, 428/613 resources updated in 07 minutes 49 seconds
gitlab Reconfigured!
[root@master ~]# lsof -i:80
COMMAND
PID
USER
FD
TYPE DEVICE SIZE/OFF NODE NAME
nginx
44551
root
7u IPv4 79911
0t0 TCP *:http (LISTEN)
nginx
44552 gitlab-www
7u IPv4 79911
0t0 TCP *:http (LISTEN)
gitlab-ctl 其他命令。
启动:gitlib-ctl start
关闭:gitlab-ctl stop
重启:gitlab-ctl restart
重载配置:gitlab-ctl reconfigure
查看状态:gitlab-ctl status
GitLab 配置文件路径为/etc/gitlab/gitlab.rb,生产环境下可以根据实际需求修改配置,
本章采用默认配置不做修改。
在浏览器中输入 http://服务器 IP 地址,访问 GitLab,如图 1.1 所示。
1.1 Gitlab 登录密码设置页
设置完密码后,使用 root 用户进行登录,如图 1.2 所示。
1.2 root 用户登录登录成功后,便可进入 GitLab 首页,如图 1.3 所示。
1.3 Gitlab 登录首页
点击图 1.3 中的“Create project” 按钮,创建如图 1.4 所示的新项目 kgc-demo
1.4 创建 kgc-demo 项目
在项目创建完成界面中点击“Add Readme”,并在 Readme 文件中添加“It's kgc-demo!”
字段,如图 1.5 所示。
1.5 添加 Readme 文件
在客户机验证。
[root@client ~]# git clone http://192.168.9.246/root/kgc-demo.git
正克隆到 'kgc-demo'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
[root@client ~]# cat kgc-demo/README.md
It's kgc-demo!
1.2.3 部署安装 Subversion
[root@master ~]# yum -y install subversion
//client 也执行此命令,安装 SVN 客户端命令
[root@master ~]# mkdir -p /kgc/svn
[root@master ~]# svnadmin create /kgc/svn
[root@master ~]# cd /kgc/svn/conf
[root@master ~]# vim passwd
kgc-test=123.com
[root@master ~]# vim authz
[/]
kgc-test=rw
修改 svnserve.conf 配置文件。
[root@master conf]# vim svnserve.conf
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = /kgc/svn
[sasl]
[root@master conf]# svnserve -d -r /kgc/svn
//启动 SVN 即可完成部署
在客户机使用 svn list 命令查看分支。执行 svn list 命令时要求先输入系统密码,再输
SVN 授权的用户名和密码即可查看 SVN 所有分支。
[root@client ~]# svn list svn://192.168.9.246
认证领域: <svn://192.168.9.246:3690> /kgc/svn
“root”的密码:
认证领域: <svn://192.168.9.246:3690> /kgc/svn
用户名: kgc-test
“kgc-test”的密码:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
注意! 你的密码,对于认证域:
<svn://192.168.9.246:3690> /kgc/svn
只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”“yes”“no”
来避免再次出现此警告。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
保存未加密的密码(yes/no)?yes
在客户端提交代码文件,过程如下所示。
[root@client ~]# svn checkout svn://192.168.9.246
[root@client ~]# mkdir svndemo
[root@client ~]# svn add svndemo
A
svndemo
[root@client ~]# svn commit -m "add svn demo"
正在增加
svndemo
提交后的版本为 1
[root@client ~]# svn list svn://192.168.9.246
svndemo/
[root@client ~]# cd svndemo
[root@client svndemo]# echo "svn test" > test.txt
[root@client svndemo]# svn add test.txt
A
test.txt
[root@client svndemo]# svn commit -m "add txt file."
正在增加
test.txt
传输文件数据.
提交后的版本为 2
[root@client svndemo]# svn list svn://192.168.9.246/svndemo
test.txt至此,SVN 部署完成。
在日常办公中有许多常用的个人数据,如朋友电话、邮件地址、日程安排、日常记事、文件上传和下载,这些都可以用一个个人信息管理系统进行管理。个人信息管理系统可以内置于手掌上的数字处理器,以提供电子名片、便条、行程管理等功能。本项目基于B/S设计,也可以发布到网上,用户可以随时存取个人信息。 用户可以在系统中任意添加、修改、删除个人数据,包括个人的基本信息、个人通讯录、日程安排、个人文件管理。 要实现的功能包括四个方面: (1)登录与注册 系统的登录和注册功能。 (2)个人基本信息管理模块 系统中对个人基本信息的管理包括:个人的姓名、性别、出生日期、民族、学历、职称、登录名、密码、电话、家庭住址等。 (2)用户个人通讯录模块 系统的个人通讯录是保存了个人的通讯录信息,包括自己联系人的姓名、电话、邮箱、工作单位、地址、QQ等。可以自由添加联系人的信息,查询或删除联系人。 (3)日程安排模块 日程模块记录自己的活动安排或者其它有关事项,如添加从某一时间到另一时间要做什么事,日程标题、内容、开始时间、结束时间。可以自由查询,修改,删除。 (4)个人文件管理模块 该模块实现用户在网上存储临时文件的功能。用户可以新建文件夹,修改、删除、移动文件夹;上传文件、修改文件名、下载文件、删除文件、移动文件等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux运维老纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值